Objective c &引用;是"-带前缀的便利方法会混淆CoreData

Objective c &引用;是"-带前缀的便利方法会混淆CoreData,objective-c,core-data,methods,nsmanagedobject,objective-c-runtime,Objective C,Core Data,Methods,Nsmanagedobject,Objective C Runtime,我有一个使用CoreData的Obj-C应用程序。该模型包括以下两个实体: 注意 QuestionnaireAnswer 注释与问题回答者(可选)具有一对一的关系,因此注释可以独立存在,或者与问题回答者关联 多年来,这种方法一直运行良好,直到最近我在Note上添加了一种方便的方法: -(BOOL)isQuestionnaireAnswer; CoreData突然开始表现出奇怪的行为;在我的MOC中插入新的注释后不久,访问注释的问题回答时,如下所示: questionnaireAnswer

我有一个使用CoreData的Obj-C应用程序。该模型包括以下两个实体:

  • 注意
  • QuestionnaireAnswer
注释
问题回答者
(可选)具有一对一的关系,因此
注释
可以独立存在,或者与
问题回答者
关联

多年来,这种方法一直运行良好,直到最近我在
Note
上添加了一种方便的方法:

-(BOOL)isQuestionnaireAnswer;
CoreData突然开始表现出奇怪的行为;在我的MOC中插入新的
注释后不久,访问
注释的
问题回答时,如下所示:

questionnaireAnswer = [note questionnaireAnswer];
引发了以下异常:

-[__NSCFBoolean entity]: unrecognized selector sent to instance
CoreData似乎错误地解释了某些类型。经过广泛的挖掘、记录和反复试验,我发现简单地将便利方法重命名为:

-(BOOL)wasAddedAsQuestionnaireAnswer;
这将解决问题


为什么我试图重现这一点,但在我的测试应用程序中,
isQuestionnaireAnswer
没有从
[注意questionnaireAnswer]
调用。它是从
-[Note setQuestionnaireAnswer:
[QuestionnaireAnswer setNote:
调用的。回溯显示它是KVO:。谢谢@Willeke对它的调查,KVO看起来确实是一个非常合理的原因!