0

私は Core Data に慣れようとしており、Xcode に NSManagedObject のサブクラスを作成してもらいました。1 つは AddressAnnotation で、番地、郵便番号、住所などの場所に関する情報が含まれています。もう 1 つは次のとおりです。

Map : NSManagedObject
@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) NSSet *locations;
- (void)addLocationsObject:(AddressAnnotation *)value;
- (void)removeLocationsObject:(AddressAnnotation *)value;
- (void)addLocations:(NSSet *)values;
- (void)removeLocations:(NSSet *)values;

地図に場所を追加したいときは、次のようにします。

- (void)insertLocationIntoMap:(Map *)map {  
    [map addLocationsObject:self.address];

Map オブジェクトとアドレス オブジェクトを NSLogged したところ、両方に値が含まれています。オブジェクトを既存の Map オブジェクトに追加しようとすると、追加されないようです。ログに記録されたそのマップの出力は次のとおりです。

<Map: 0x7087480> (entity: Map; id: 0x7084ff0 <x-coredata://8D6D7849-E7EC-48A3-BA95-C082D09E5D6D/Map/p1> ; data: {
    locations = "<relationship fault: 0x768e4e0 'locations'>";
    name = asdf;
})

新しいマップを作成してから insertLocationIntoMap: を呼び出すと、AddressAnnotation オブジェクトが追加されます。ログに記録されたそのマップは次のとおりです。

<Map: 0x767dee0> (entity: Map; id: 0x767d2d0 <x-coredata://8D6D7849-E7EC-48A3-BA95-C082D09E5D6D/Map/p5> ; data: {
    locations =     (
    );
    name = asdfasdf;
})

Maps オブジェクトに AddressAnnotation を追加する際に何か問題がありますか? これは、私が NSManagedObject のサブクラスを使用せず、 setValue:forKey: をどこでも使用していたときに機能していましたが、慣れるとより直感的になると思いました。ありがとう!

4

1 に答える 1

0

最初のログは、関係の障害を示しています。これは、どのオブジェクトがその関係にあるかについては何もわかりません。AddressAnnotation.mapまた、関係を記録する必要があります。1 対多の関係ですか、それとも多対多の関係ですか?

最終的に、どのオブジェクトが関連しているかを出力したい場合は、取得リクエストを使用して、場所の関係にあるオブジェクトを取得する必要があります ( %@が関心のあるインスタンスに置き換えられ@"self.map == %@"たエンティティの場合)。AddressAnnotationMap

于 2012-06-27T09:51:03.970 に答える