2016-09-22 92 views
0

我遇到的問題是,當它與我正在提取的實體有關係時,我無法訪問實體的屬性。Swift 3 - 核心數據 - 獲取結果控制器訪問關係屬性

關於我的應用程序,我創建了一個健身跟蹤應用程序,我有一個詳細的表視圖控制器跟蹤我的活動。當我點擊一個單元格時,視圖會進入另一個視圖控制器以顯示跟蹤位置的地圖。

使用抓取的結果控制器我抓取「Entity1」。當我點擊一個單元格'我想'時,我想繼續傳遞「Entity2」屬性值到另一個視圖控制器。除了從「ENTITY1」到「ENTITY2」的關係是「一對多」的關係,在對「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」屬性值在我的地圖視圖來顯示數據控制器。

回答

2

由於這是一對多的關係,因此您所調用的entity2是一組Entity2的多個實例。這就是「to-many」的「許多」部分在這裏的意思 - 一個Entity1與多個Entity2實例的集合有關。您無法訪問集合上的Entity2屬性,因爲它是多個實例的集合。要訪問Entity2屬性,首先需要從集合中選擇一個對象。

你如何做到這一點取決於你的應用程序應該如何工作。你有一個NSOrderedSet,它有多種選擇來選擇它包含的一個對象。您可以詢問第一個對象,或最後一個對象,或者在有序集合中的特定位置請求Entity2。除此之外還有其他選擇;有關它們的更多信息,請參閱NSOrderedSet文檔。

+0

非常好 - 花了一點思考能夠弄清楚如何訪問屬性。在訪問數組時,類型轉換是解決方案 - 讓entity2 = entity1.entity2 as! ENTITY2。然後從那裏:) :) – lifewithelliott

+1

因爲'entity2'在你的代碼片段中被聲明爲一個'NSMutableSet',所以我很驚訝類型化爲'Entity2'甚至編譯,更少的作品。 –

+0

我的歉意 - 我忘記訪問實際的財產。在該評論中,它應該是'let entity2 = entity1.entity2.firstObject as! ENTITY2' – lifewithelliott