我正在深入研究iOS开发,我有一些关于操作我在Xcode中创建的简单Core Data对象的问题。使用对象编辑器后,这是Xcode为我生成的类......
@interface Alarm : NSManagedObject
{
}
@property (nonatomic, retain) NSNumber * Enabled;
@property (nonatomic, retain) NSString * Label;
@property (nonatomic, retain) NSNumber * Snooze;
@end
@implementation Alarm
@dynamic Enabled;
@dynamic Label;
@dynamic Snooze;
@end
这是一个代码剪切,我尝试创建一个Alarm
对象,我计划添加到我的ManagedObjectContext ...
- (void)saveAlarm:(id)sender {
Alarm *alarm = [[Alarm alloc] init];
alarm.Label = [NSString stringWithString:txtLabel.text];
alarm.Snooze = [NSNumber numberWithBool:switchSnooze.on];
alarm.Enabled = [NSNumber numberWithBool:YES];
[addAlarmDelegate insertNewAlarm:alarm];
[alarm release];
}
我第一次尝试将代码分配给警报的某个属性时,我的代码崩溃了......
alarm.Label = [NSString stringWithString:txtLabel.text];
在控制台中显示以下崩溃消息...
reason: '-[Alarm setLabel:]: unrecognized selector sent to instance 0x5e33640
我在这里错过了什么?
非常感谢您的帮助!
答案 0 :(得分:4)
我会研究使用mogenerator:
http://rentzsch.github.com/mogenerator/
运行它的命令行是:
mogenerator -m MyAwesomeApp.xcdatamodel -O Classes
在-O之后放置的目录是生成的类所在的位置。最棒的是它有更简单的方法在上下文中创建新的管理对象,并且还生成一个可以自定义的类(添加自己的方法),即使从模型中重新生成对象,也不会被删除。
比使用XCode对象生成简单得多。
答案 1 :(得分:2)
您不应直接分配和初始化基于NSManagedObject的对象。你应该使用
[NSEntityDescription insertNewObjectForEntityForName:@"Alarm" inManagedObjectContext:moc];
这可能是它不起作用的原因。因为它通常很直接才能使它发挥作用。
文档说:
如果您实例化托管对象 直接,您必须致电指定 初始化 (initWithEntity:insertIntoManagedObjectContext:)。
在initWithEntity中:insertIntoManagedObjectContext:的文档:
重要提示:此方法是 指定的初始化程序 NSManagedObject。你不能 简单地初始化一个托管对象 发送它。