NSManagedObject [User setUsername:]:发送到实例的无法识别的选择器

jdo*_*dog 2 core-data objective-c

我有一个使用CoreData的应用程序.我为CoreData中的两个对象类型创建了NSManagedObjects.当我尝试使用该对象并在对象上设置属性时,编译器会将"[User setUsername:]:无法识别的选择器发送到实例".无论我使用什么属性[User setValue],尝试它总是无法识别?

User *joeBlow = [[User alloc] init];
[joeBlow setUsername:@"joeblow"];
Run Code Online (Sandbox Code Playgroud)

或者用户*joeBlow = [[User alloc] init]; joeBlow.username = @"JoeBlow";

两者都给"发送到实例的无法识别的选择器"

以下是我的USER代码:

User.h

@interface User : NSManagedObject

  @property (nonatomic, retain) NSString * address1;
  @property (nonatomic, retain) NSString * username;
  @property (nonatomic, retain) NSString * zip;
  @property (nonatomic, retain) NSString * email;

@end
Run Code Online (Sandbox Code Playgroud)

User.m

@implementation User

  @dynamic address1;
  @dynamic username;
  @dynamic zip;
  @dynamic email;

@end
Run Code Online (Sandbox Code Playgroud)

Tim*_*Tim 5

您无法通过正常的创建核心数据实体的新实例alloc- init模式(不同于其他类).相反,在NSEntityDescription上调用类方法:

User *joeBlow = [NSEntityDescription 
                 insertNewObjectForEntityForName:@"User"
                 inManagedObjectContext:self.managedObjectContext];
[joeBlow setUsername:@"joeblow"];
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅Apple的核心数据编程指南.

最后,请注意[jb setUsername:@"jb"]并且jb.username = @"jb"是相同的 - 后者是点符号,表达前者的不同方式.