如何使用NSManagedObject而不将其添加到db?

时间:2015-04-29 12:05:08

标签: ios core-data nsmanagedobject nsmanagedobjectcontext

我正在使用继承使用我的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];

1 个答案:

答案 0 :(得分:0)

不,您可以创建NSManagedObject子类的实例,然后将它们添加到托管对象上下文(虽然我建议不要这样做)。您的Sketch对象存在问题,而NSManagedObjectNSManagedObjectContext则存在问题。

唯一的事情是你应该像这样创建它:

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