2012-08-22 32 views
0

我已经(重)子类NSManagedObject的一个项目。它无缝地在原始项目中工作,毫不费力。为什么我的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文件被添加到编译器构建阶段。该代码完全是从字面上复制&粘贴,并且两个项目之间是相同的 - 源代码作品,目的地不。

我注意到,我没有明确地告诉上下文它应该返回子类的类型,但这在旧项目中不是问题,那为什么它应该是新问题呢?

+1

因此您将新类添加到数据模型中,但是您是否已将类名更改为您的自定义类? – Rog

回答

1

当这样的事情发生在我身上时,我尝试了两件事。我做的第一件事是确保我正确地#导入NSManagedObject子类(我比我应该更频繁地忘记这种方式),但正如你所说的你复制和粘贴,我不认为这是你的问题。我尝试的第二件事是通过转到File> New> File然后NSManagedObject Subclass重新生成NSManagedObjects,然后选择我更改了某些内容的NSManagedObjects。我建议您重建它们中的所有内容。看看是否有效。它可能不是,但它是一个容易开始的地方。

+0

* winces *如果我重建它们,我会放弃所有的自定义逻辑!哦,更容易重新创建,比在应用程序大喊'开始'正在工作' – RonLugge

+0

重建后,我建议您在添加自定义逻辑之前测试它。:) – esthepiking

+0

应用程序不会运行没有自定义逻辑 - - 在这里,我认为我很聪明,让班级处理它自己的东西,让外部世界知道它需要知道什么。 (封装ftw,对不对?) – RonLugge

1

确保您检查了模型,并确保已在检查器中更改类名称。否则,无论如何,它们都会返回NSManagedObjects。并且使用mogenerator,所以你不必担心重新生成类。

1

我知道这个问题是陈旧的,但也许有人搜索会觉得这有帮助。

我一直在使用类别向NSManagedObject子类添加附加函数。这使我可以使用XCode命令生成类定义而不破坏任何自定义逻辑。罗恩在对选定答案的评论中提到了这一点 - 只是认为值得引起注意,因为我觉得这是一个非常漂亮的解决方案。

+0

是的 - 这是我的长期解决方案。包装不完全有意义,所以我只是使用类别。 – RonLugge

相关问题