Swift 3 -核心数据获取结果控制器访问关系属性



所面临的问题是,我无法访问一个实体的属性,当它是一个关系,我正在获取的实体。

关于我的应用程序,我正在创建一个健身跟踪应用程序,我有一个详细的表视图控制器与我跟踪的活动。当我点击一个单元格时,视图跳转到另一个视图控制器,以显示跟踪位置的地图。

使用获取的结果控制器,我正在获取"Entity1"。当我点击一个单元格时"我认为"我想segue;将"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"属性值显示该数据在我的地图视图控制器。

由于这是一个多对多关系,因此您所称的entity2Entity2的多个实例的集合。这就是"对多"的"多"部分在这里的意思——一个Entity1与多个Entity2实例的集合相关。您不能访问集合上的Entity2属性,因为它是一个不止一个实例的集合。要访问Entity2属性,首先需要从集合中选择一个对象。

你怎么做取决于你的应用程序应该如何工作。您有一个NSOrderedSet,它有多种选择它所包含的对象的选项。您可以请求第一个对象,或最后一个对象,或在有序集中的特定位置的Entity2。除了这些,还有其他选择;有关它们的更多信息,请参阅NSOrderedSet文档

相关内容

  • 没有找到相关文章

最新更新