我正在使用继承使用我的db模型生成的NSManagedObject
的类:
// .h
@interface Sketch : NSManagedObject
@property (nonatomic, retain) NSDate * added;
@property (nonatomic, retain) NSString * board;
@property (nonatomic, retain) NSString * filepath;
@property (nonatomic, retain) NSString * title;
@property (nonatomic, retain) NSString * filename;
@end
// .m
@implementation Sketch
@dynamic added;
@dynamic board;
@dynamic filepath;
@dynamic title;
@dynamic filename;
@end
我正在UITableView
中使用该类实例。现在我需要添加一些未存储在db中的实例(只是为了在列表中显示它们):
Sketch sketch = [[Sketch alloc] init];
但是在尝试设置实例属性时
sketch.title = @"test title";
我得到例外:
-[Sketch setTitle:]: unrecognized selector sent to instance 0x7ff112c13e30
这是否意味着必须通过仅将其添加到托管上下文来创建实例(即使我不打算存储它们)?
[NSEntityDescription insertNewObjectForEntityForName:SKETCH_ENTITY
inManagedObjectContext:context];
答案 0 :(得分:0)
不,您可以创建NSManagedObject
子类的实例,然后将它们添加到托管对象上下文(虽然我建议不要这样做)。您的Sketch
对象存在问题,而NSManagedObject
和NSManagedObjectContext
则存在问题。
唯一的事情是你应该像这样创建它:
NSManagedObjectContext *moc = ... // your managed object context
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Sketch"
inManagedObjectContext:moc];
// note nil for context
Sketch *unassociatedObject =
(Sketch *)[[NSManagedObject alloc] initWithEntity:entity
insertIntoManagedObjectContext:nil];
有关详细信息,请参阅this answer。