如何在不将其添加到数据库的情况下使用 NSManagedObject?
How to use NSManagedObject without adding it to db?
我有 class 继承了使用我的数据库模型生成的 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
中使用 class 个实例。现在我需要添加一些没有存储在数据库中的实例(只是为了在列表中显示它们):
Sketch sketch = [[Sketch alloc] init];
但是在尝试设置实例属性时
sketch.title = @"test title";
我遇到异常:
-[Sketch setTitle:]: unrecognized selector sent to instance 0x7ff112c13e30
这是否意味着我必须通过仅将它们添加到托管上下文来创建实例(即使我不打算存储它们)?
[NSEntityDescription insertNewObjectForEntityForName:SKETCH_ENTITY
inManagedObjectContext:context];
不,您可以创建 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。
我有 class 继承了使用我的数据库模型生成的 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
中使用 class 个实例。现在我需要添加一些没有存储在数据库中的实例(只是为了在列表中显示它们):
Sketch sketch = [[Sketch alloc] init];
但是在尝试设置实例属性时
sketch.title = @"test title";
我遇到异常:
-[Sketch setTitle:]: unrecognized selector sent to instance 0x7ff112c13e30
这是否意味着我必须通过仅将它们添加到托管上下文来创建实例(即使我不打算存储它们)?
[NSEntityDescription insertNewObjectForEntityForName:SKETCH_ENTITY
inManagedObjectContext:context];
不,您可以创建 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。