使用iPhone核心数据到很多关系

时间:2010-06-01 18:26:13

标签: iphone objective-c core-data

当我在Xcode中定义实体之间的多对多关系然后从实体生成数据类时,我得到一个标题,定义了以下方法:

@interface PriceList (CoreDataGeneratedAccessors)
- (void)addItemsObject:(PriceListItem *)value;
- (void)removeItemsObject:(PriceListItem *)value;
- (void)addItems:(NSSet *)value;
- (void)removeItems:(NSSet *)value;
@end

当我尝试使用以下代码调用addItemsObject时,会抛出doesNotRecognizeSelector异常。

PriceListItem *item = [NSEntityDescription insertNewObjectForEntityForName:@"PriceListItem" inManagedObjectContext:managedObjectContext];
item.cat = [attributeDict valueForKey:@"c"];
item.sel = [attributeDict valueForKey:@"s"];
[self addItemsObject:item];

根据我的阅读,我不必实现这些方法,并且它们是在运行时生成的。有什么想法吗?

此上下文中的

self是PriceList的子类。

我认为问题在于我没有正确初始化PriceList对象。

2 个答案:

答案 0 :(得分:0)

您需要告诉您的模型您刚刚生成的新子类。查看模型,选择实体,然后在右侧将类从NSManagedObject更改为子类的名称。否则,Core Data只会将您带回NSManagedObject,并且不知道您的子类是否存在。

更新

你确认了吗?由于Xcode将编辑数据模型,但如果您之后不保存它,那么它将不会被持久化。查看数据模型会发生什么?

答案 1 :(得分:0)

最简单的解释是self类实际上不是PriceList的子类。我会记录

[[self super] class]

......确认。

您还应确保方法的接口位于.h头文件中,而不是.m实现文件中。如果您从模型编辑器中的上下文菜单生成方法,则很容易将它们放在错误的位置。