2016-09-22 8 views
0

フェッチされている問題は、フェッチしているエンティティとの関係でエンティティの属性にアクセスできないことです。Swift 3 - コアデータ - フェッチ結果コントローラアクセス関係属性

私のアプリに関連して、私はフィットネス追跡アプリケーションを作成しています、私は追跡されたアクティビティで詳細テーブルビューコントローラを持っています。セルをタップすると、ビューは別のView Controllerに移動し、追跡された位置のマップを表示します。

フェッチされた結果コントローラを使用して、私は "Entity1"をフェッチしています。私がセルをタップすると、私は&の "Entity2"属性値を別のView Controllerに渡したいと思っています。 「Entity2は」関係「多くのために」と「Entity1」のためのコアデータのプロパティであるために「Entity1」からの関係を除き、

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

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

ので、私は「Entity2」プロパティにアクセスすることはできません。私は "Entity2" プロパティにアクセスしようとどのように

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") 
    } 
} 

:私は "Entity1" をフェッチする方法

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 
} 

は結論するには:私の質問は - 私は「Entity2は」私のマップビューでそのデータを表示するために、アクセス「Entity2」属性値との関係である「Entity1」の記述があるセルをタップすることができますどのようにコントローラ。

答えて

2

これは多対多関係であるため、entity2と呼ぶものは、複数のインスタンスEntity2のセットです。これは、ここにある「多対多」の「多くの」部分が意味するものです.1つはEntity1で、複数のEntity2インスタンスのコレクションに関連しています。複数のインスタンスのコレクションなので、セットの属性Entity2にアクセスすることはできません。 Entity2属性にアクセスするには、最初にセットから1つのオブジェクトを選択する必要があります。

どのようにするかは、アプリの動作方法によって異なります。 NSOrderedSetがあり、それに含まれるオブジェクトの1つを選択するためのさまざまなオプションがあります。最初のオブジェクト、最後のオブジェクト、またはEntity2を順序付きセットの特定の場所に要求できます。これら以外にもオプションがあります。それらの詳細については、NSOrderedSetのドキュメントを参照してください。

+0

優秀 - 少しアクセスしてプロパティにアクセスする方法を考え出すことができました。配列にアクセスするときに、型キャスティングが解決策でした - entity2 = entity1.entity2を!エンティティ2。そこから行った: – lifewithelliott

+1

'entity2'はあなたのコードスニペットで' NSMutableSet'として宣言されているので、 'Entity2'への型キャストはコンパイルされず、はるかに少ない仕事に驚いています。 –

+0

私の謝罪 - 私は実際の不動産にアクセスするのを忘れました。そのコメントでは、 'let entity2 = entity1.entity2.firstObject!エンティティ2 ' – lifewithelliott

関連する問題