0

我正在尝试熟悉 Core Data 并让 Xcode 为我创建 NSManagedObject 的子类。一个是 AddressAnnotation,它只包含一些关于位置的信息,如街道、邮编、地址等。另一个是:

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];

我 NSLogged Map 对象和地址对象,两者都有值。当我尝试将对象添加到现有的 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关系。是一对多还是多对多的关系?

最后,如果您想打印出哪些对象是相关的,您应该使用获取请求来获取位置关系中的对象(@"self.map == %@"对于AddressAnnotation带有 %@ 的实体替换为Map您感兴趣的实例)。

于 2012-06-27T09:51:03.970 回答