我在实施核心数据时遇到了这个错误。
我创建了一个实体'FlashCard',其属性为'question'和'answer'。这两个属性都是NSString类型。
将新对象插入NSManaged Object后,我尝试设置2个属性,如下所示。
NSManagedObject *newCard = [NSEntityDescription insertNewObjectForEntityForName:@"FlashCard" inManagedObjectContext:self.managedObjectContext];
newCard.question = thisQuestion;
newCard.answer = thisAnswer;
但是当我尝试编译代码时,我遇到错误“请求成员'问题'在某些东西中不是结构或联合'。我对newCard.answer行有同样的错误。
非常感谢任何有关如何解决这个问题的建议!
振
答案 0 :(得分:5)
您的newCard
个实例的类型应为FlashCard
而不是NSManagedObject
;否则,编译器将不知道newCard
具有属性question
和answer
。
FlashCard *newCard = (FlashCard *)[NSEntityDescription insertNewObjectForEntityForName:@"FlashCard" inManagedObjectContext:self.managedObjectContext];
newCard.question = thisQuestion;
newCard.answer = thisAnswer;
答案 1 :(得分:2)
您已将newCard声明为NSManagedObject,然后尝试访问NSManagedObject未定义的属性。
Core Data为您提供了使用NSManagedObject的自定义子类来表示实体的选项。如果您正在执行此操作,正如其他人所建议的那样,您需要将newCard声明为该子类的实例(如果您不这样做,则必须编写该类并在需要时自行声明属性使用'dot'属性语法---核心数据不会为每个实体类型自动创建NSManagedObject的子类)
此外,您不必仅使用自己的子类或写访问器来访问托管对象的属性和关系。如果您还不需要向FlashCard添加任何自定义逻辑,则可以在NSManagedObject上使用键值编码。这样可以正常工作:
NSManagedObject *newCard = [NSEntityDescription insertNewObjectForEntityForName:@"FlashCard" inManagedObjectContext:self.managedObjectContext];
[newCard setValue: thisQuestion forKey: @"question"];
[newCard setValue: thisAnswer forKey: @"answer"];
答案 2 :(得分:1)
#import "FlashCard.h"
此文件顶部是否包含“FlashCard.h”?