我正在尝试熟悉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:无处不在时,这是有效的,但我认为这在我习惯之后会更直观。谢谢!
答案 0 :(得分:0)
第一个日志显示关系的错误。这没有说明该关系中的哪些对象。您还应该记录AddressAnnotation.map
关系。它是一对多还是多对多的关系?
最后,如果要打印出哪些对象相关,则应使用获取请求来获取位置关系中的对象(@"self.map == %@"
为AddressAnnotation
实体,并取代%@您感兴趣的Map
实例。