当我在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对象。
答案 0 :(得分:0)
您需要告诉您的模型您刚刚生成的新子类。查看模型,选择实体,然后在右侧将类从NSManagedObject更改为子类的名称。否则,Core Data只会将您带回NSManagedObject,并且不知道您的子类是否存在。
你确认了吗?由于Xcode将编辑数据模型,但如果您之后不保存它,那么它将不会被持久化。查看数据模型会发生什么?
答案 1 :(得分:0)
最简单的解释是self类实际上不是PriceList的子类。我会记录
[[self super] class]
......确认。
您还应确保方法的接口位于.h头文件中,而不是.m实现文件中。如果您从模型编辑器中的上下文菜单生成方法,则很容易将它们放在错误的位置。