CoreData问题: - [NSManagedObject setValue:]:发送到实例的无法识别的选择器

Ols*_*lsi 18 iphone core-data objective-c nsmanagedobject ios

我昨天刚开始使用CoreData,我疯了:(我创建了一个使用CoreData的项目(勾选方框 - 使用CoreData).创建实体,然后为所有实体创建NSManagedObject类(我猜他们创建实体的'setter'和'getter'方法).

现在,我在AppDeletegate中#imported所有这些类,并在我的applicationDidFinishLaunching方法中写了这个:

(订阅是申请中的实体之一)

NSManagedObjectContext *context = [self managedObjectContext];
 Subscriptions *sbs = (Subscriptions *)[NSEntityDescription insertNewObjectForEntityForName:@"Subscriptions" inManagedObjectContext:context];
 [sbs setTitle:@"OK"];
 [sbs setType:@"Tag"];
 [sbs setCode:@"cars"];

 NSError *error = nil;
 if (![context save:&error]) {
  NSLog(@"Couldn't create the subscription");
 }
Run Code Online (Sandbox Code Playgroud)

当我运行它时,我收到此错误

[NSManagedObject setTitle:]:无法识别的选择器发送到实例0x6160550

我不知道为什么会这样.请帮忙!!!在此先感谢大家!

添加Subscriptions
Subscriptions.h 的标题

@interface订阅:NSManagedObject {
}
@property(nonatomic,retain)NSString*Type;
@property(nonatomic,retain)NSDecimalNumber*Read;
@property(nonatomic,retain)NSString*Title;
@property(nonatomic,retain)NSString*Code;
@property(nonatomic,retain)NSDecimalNumber*New;
@结束

我什么都没改变.就像Xcode创建它一样.

b12*_*400 32

只是提醒一下,不要使用大写变量名,它可能会影响getter和setter不能正常工作.

如果你从数据模型生成NSManagedObject子类,一切都应该没问题,虽然它是@dynamic,setters是由coredata实现的,并且因为它们已经实现,所以你不应该将它改为合成.至少对我来说,在将@dynamic更改为@synthesize之后,coredata返回空对象.

不要忘记在数据模型中设置类名:

在此输入图像描述

  • 谢谢.这是关于我的模型中关于类名的最后一件事. (4认同)

Alp*_*ure 12

我得到了这个,并对项目进行了清理并修复了它.

  • 我遇到了同样的问题并清理项目修复它! (2认同)

Suw*_*ana 0

在我看来,标题属性可能未设置为字符串。你检查过吗?

通常,发送到实例的无法识别的选择器是由于向对象发送消息而该对象不知道如何处理而导致的运行时错误。

Subscriptions *sbs = (Subscriptions *)[NSEntityDescription insertNewObjectForEntityForName:@"Subscriptions" inManagedObjectContext:context];
sbs.Title = @"OK";
Run Code Online (Sandbox Code Playgroud)

希望有帮助

我在这里做了一个简单的项目。