我正在尝试获取 parent 的所有 child 。

在我的情况下,父级是一个实体AgendaEvent,它具有许多AgendaDate(子级)。

所以这是我的功能:

 func getRelatedAgendaEvent(event: AgendaEvent) ->NSFetchRequest<AgendaDate> {
    // create a fetch request that will retrieve all the AgendaDate.
    let fetchRquest = NSFetchRequest<AgendaDate>(entityName: "AgendaDate")

    // set the predicate to only keep AgendaDate related with the AgendaEvent selected
    fetchRquest.predicate = NSPredicate(format: "parent == %@", event)

    return fetchRquest
}

我在didselectRow中将它用于tableView:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    var eventToPass: AgendaEvent!
    var eventDateToPassArray: [AgendaDate]!

    eventToPass = myTempEvents[indexPath.row]
    eventDateToPassArray = try! context.fetch(getRelatedAgendaEvent(event: eventToPass))
    DispatchQueue.main.async { () -> Void in
        self.performSegue(withIdentifier: "EventToModify", sender: eventToPass)
    }
}

}

我正在尝试在segue中使用eventDateToPassArray。
我得到的错误是:
keypath parent not found in entity <NSSQLEntity AgendaDate id=1> with userInfo of (null)

我不确定这是正确的方法。我在用户编辑AgendaEvent时尝试更新NSSet(AgendaDate)。因此,基本上,在更新和AgendaEvent时,用户还更新了相关AgendaData NSSet中的日期。

谢谢!

-------------更新

马丁,你的意思是:

AgendaDate + CoreDataProperties.swift
extension AgendaDate {

@nonobjc public class func fetchRequest() -> NSFetchRequest<AgendaDate> {
    return NSFetchRequest<AgendaDate>(entityName: "AgendaDate")
}

@NSManaged public var agendaDates: NSDate?
@NSManaged public var agendaEvents: AgendaEvent?

}

AgendaDate + CoreDataClass.swift
import Foundation
import CoreData

@objc(AgendaDate)
public class AgendaDate: NSManagedObject {

}

最佳答案

提取请求中使用的 key 路径必须与实际名称匹配
核心数据关系(在您的情况下为“agendaEvents”),
没有隐式的“父”关系:

fetchRquest.predicate = NSPredicate(format: "agendaEvents == %@", event)

更好的是,使用#keyPath%K扩展
fetchRquest.predicate = NSPredicate(format: "%K == %@",
                                    #keyPath(AgendaDate.agendaEvents), event)

因此,该编译器会检查 key 路径的有效性。
这有助于避免使用未知的 key 路径或错别字。

请注意,更好的关系名称为“agendaEvent”
或仅是“事件”,以一对一关系的单数形式表示。

关于ios - Swift-核心数据NSPredicate-获取父级的子级,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46380394/

10-12 00:15