目标C:在非结构或联合的东西中请求成员XXX。 (核心数据)

时间:2011-04-17 18:55:47

标签: objective-c cocoa-touch core-data nsmanagedobject

我在实施核心数据时遇到了这个错误。

我创建了一个实体'FlashCard',其属性为'question'和'answer'。这两个属性都是NSString类型。

将新对象插入NSManaged Object后,我尝试设置2个属性,如下所示。

 NSManagedObject *newCard = [NSEntityDescription insertNewObjectForEntityForName:@"FlashCard" inManagedObjectContext:self.managedObjectContext];
 newCard.question = thisQuestion;
 newCard.answer = thisAnswer;

但是当我尝试编译代码时,我遇到错误“请求成员'问题'在某些东西中不是结构或联合'。我对newCard.answer行有同样的错误。

非常感谢任何有关如何解决这个问题的建议!

3 个答案:

答案 0 :(得分:5)

您的newCard个实例的类型应为FlashCard而不是NSManagedObject;否则,编译器将不知道newCard具有属性questionanswer

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”?