我已经(大量)将 NSManagedObject 子类化为一个项目。它在原始项目中无缝地工作,不费吹灰之力。
我将这些文件复制到一个新项目中,手动将适当的 CoreData 类添加到新数据模型中。
不幸的是,我遇到了“问题”。由于某种原因,所讨论的子类的方法被忽略了。两个项目之间的代码完全相同,但我突然遇到了无法识别的选择器问题。
NSFetchRequest *blockRequest=[[NSFetchRequest alloc] init];
NSEntityDescription *blockDesc=[NSEntityDescription entityForName:@"AdBlock"
inManagedObjectContext:context];
[blockRequest setEntity:blockDesc];
AdBlock *curBlock=[adBlocks objectAtIndex:blockIndex];
adBlocks=[context executeFetchRequest:blockRequest error:nil];
for (AdBlock *block in adBlocks) {
[block initAdBlock];//Crashes with unrecognized selector
}
我已经检查过了,适当的 .m 文件已添加到编译器构建阶段。代码实际上是复制和粘贴,并且在两个项目之间是相同的——源代码有效,目标代码无效。
我注意到我没有明确告诉上下文它应该返回子类类型,但这在旧项目中不是问题,那么为什么在新项目中会出现问题呢?