在Core Data中添加对象

时间:2012-06-27 04:31:30

标签: iphone core-data

我正在尝试熟悉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:无处不在时,这是有效的,但我认为这在我习惯之后会更直观。谢谢!

1 个答案:

答案 0 :(得分:0)

第一个日志显示关系的错误。这没有说明该关系中的哪些对象。您还应该记录AddressAnnotation.map关系。它是一对多还是多对多的关系?

最后,如果要打印出哪些对象相关,则应使用获取请求来获取位置关系中的对象(@"self.map == %@"AddressAnnotation实体,并取代%@您感兴趣的Map实例。