Как использовать NSManagedObject без добавления его в db?

107
8

У меня есть класс, который наследует NSManagedObject который был сгенерирован с использованием моей модели db:

// .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];

спросил(а) 2015-04-29T15:05:00+03:00 5 лет, 6 месяцев назад
1
Решение
81

Нет, вы можете создавать экземпляры подклассов 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];

Подробнее см. Этот ответ.

ответил(а) 2015-04-29T15:10:00+03:00 5 лет, 6 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема