现在面临的问题是,当一个实体与我获取的实体存在关系时,我无法访问该实体的属性。
关于我的应用程序,我正在创建一个健身跟踪应用程序,我有一个详细表视图控制器与我的跟踪活动。当我点击一个单元格时,视图会进入另一个视图控制器,以显示跟踪位置的地图。
使用获取的结果控制器,我正在获取“Entity1”。当我点击一个单元格“我想”时,我想将“Entity2”属性值分割并传递到另一个视图控制器中。除了从“Entity1”到“Entity2”的关系是一个“to Many”关系,在“Entity1”的核心数据属性中,

extension Entity1
{
    // instead of "Entity2" being represented as
    // @NSManaged var entity2: Entity2?

    //it is represented as
    @NSManaged var entity2: NSOrderedSet?
}

因此我无法访问“Entity2”属性。
如何获取“Entity1”:
func fetchEntity1ResultsController( _ context: NSManagedObjectContext )
{
    let request: NSFetchRequest<Entity1> = NSFetchRequest( entityName: "Entity1" )
    request.sortDescriptors  = [ NSSortDescriptor( key: "timestamp", ascending: false ) ]

    fetchedResultsController = NSFetchedResultsController( fetchRequest: request, managedObjectContext: context, sectionNameKeyPath: nil, cacheName: nil )
    fetchedResultsController?.delegate = self

    do
    {
        try fetchedResultsController?.performFetch()
    }
    catch
    {
        print("Couldn't fetch results controller")
    }
}

如何尝试访问“Entity2”属性。
private func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
{
    guard let entity1 = fetchedResultsController?.object(at: indexPath) else { return }

    entity1.entity2.//No core data properties listed here
}

总结:我的问题是-我如何点击“Entity1”描述中“Entity2”与之相关的单元格,并访问“Entity2”属性值以在地图视图控制器中显示该数据。

最佳答案

因为这是一种多对多关系,所以您所称的entity2是一组Entity2的多个实例。这就是“多对多”的“多”部分在这里的意思——一个Entity1与多个Entity2实例的集合有关。不能访问集合上的Entity2属性,因为它是多个实例的集合。要访问Entity2属性,首先需要从集合中选择一个对象。
你怎么做取决于你的应用程序应该如何工作。您有一个NSOrderedSet,它有多种选择它包含的对象之一的选项。您可以在有序集的特定位置请求第一个对象或最后一个对象,或Entity2。除此之外还有其他选项;有关这些选项的更多信息,请参阅NSOrderedSet文档。

关于ios - Swift 3-核心数据-获取的结果 Controller 访问关系属性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39646018/

10-13 00:51