2017-04-12 8 views
0

私は次のエンティティとのマップアプリ構築しています:地図に座標'to-manyキーはここでは許可されません'が、なぜですか?

enter image description here

enter image description here

はCoordinateにまで-1および地図です対多の関係です。

そして、私のコードは次のようになります。

fileprivate var fetchedResultsControllerForMapEntity: NSFetchedResultsController<Map> = { 
// Create Fetch Request 
let fetchRequest: NSFetchRequest<Map> = Map.fetchRequest() 

// Configure Fetch Request 
fetchRequest.sortDescriptors = [NSSortDescriptor(key: "name", ascending: true)] 
fetchRequest.predicate = NSPredicate(format:"newRelationship == %@", "peachesfarm") 

// Create Fetched Results Controller 
let fetchedResultsControllerForMapEntity = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: managedObjectContext, sectionNameKeyPath: nil, cacheName: nil) 

return fetchedResultsControllerForMapEntity 
}() 

fileprivate var fetchedResultsControllerForCoordinateEntity: NSFetchedResultsController<Coordinate> = { 
// Create Fetch Request 
let fetchRequest: NSFetchRequest<Coordinate> = Coordinate.fetchRequest() 

// Configure Fetch Request 
fetchRequest.sortDescriptors = [NSSortDescriptor(key: "latitude", ascending: true)] 
fetchRequest.sortDescriptors = [NSSortDescriptor(key: "longitude", ascending: true)] 

// Create Fetched Results Controller 
let fetchedResultsControllerForCoordinateEntity = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: managedObjectContext, sectionNameKeyPath: nil, cacheName: nil) 

return fetchedResultsControllerForCoordinateEntity 
}() 

私は基本的にONLY「peachesfarm」と呼ばれるマップの座標を取得しようとしています。なぜこの例外が発生するのでしょうか? 「newRelationshipは」等しいかどうかを比較することはできません 対多の関係であるため

+0

は ' newRelationship'は混乱しあい、あいまいであるため、 'Map''''''''''''座標**''''と' 'Coordinate'''''''''をマップに追加しなければなりません。 - > 1)。その後、 'NSManagedObject'サブクラスを作成し、そのプロパティを使用します。 – vadian

+0

さて、私のcode/dbの問題は何ですか? – konyv12

+0

指定された名前を持つマップのすべての座標を取得するには、 "座標"と述語 "map.name ==%@"( "newRelationship.name =%@")の取得要求を作成する必要があります。その逆ではありません。 –

答えて

1
NSPredicate(format:"newRelationship == %@", "peachesfarm") 

はエラーになります。

という名前のマップに関連するすべての座標をフェッチするには、「マップ」ではなく「座標」のフェッチ要求を使用する必要があります。 次に、関連するマップの名前にキーパスを使用します。その上で@vadianによって示唆されているようにエラーが回避されるように、コンパイラのチェック #keyPathディレクティブ、プロパティ名を使用し、さらに良い

let fetchRequest: NSFetchRequest<Coordinate> = Coordinate.fetchRequest() 
let predicate = NSPredicate(format: "map.name == %@", "peachesFarm") 
fetchRequest.predicate = predicate 

だろう 関係名を使用する:

let predicate = NSPredicate(format: "\(#keyPath(Coordinate.map.name)) == %@", "peachesFarm") 
+0

ありがとうございます。私は疑問があります:どのように "peachesfarm"動的にすることができますか?たとえば、この情報を保持するが、上記の関数の外にある変数? – konyv12

+0

@ konyv12:リテラル文字列を文字列変数で置き換えることができます: 'NSPredicate(format:" map.name ==%@ "、mapName)' –

関連する問題