2015-04-29 4 views
0

У меня класс, который наследует NSManagedObject, который был создан с помощью моей модели DB:Как использовать 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. Теперь мне нужно добавить некоторые экземпляры, которые не хранятся в БД (просто, чтобы показать их в списке):

Sketch sketch = [[Sketch alloc] init]; 

Но при попытке установить свойства экземпляра

sketch.title = @"test title"; 

Я получаю исключение:

-[Sketch setTitle:]: unrecognized selector sent to instance 0x7ff112c13e30 

Означает ли это, я должен создать экземпляр, добавив их в управляемом контексте только (даже если я не буду хранить их)?

[NSEntityDescription insertNewObjectForEntityForName:SKETCH_ENTITY 
            inManagedObjectContext:context]; 
+0

Можете ли вы поместить код своего класса Sketch, пожалуйста, –

+0

с кодом – 4ntoine

+0

Вы импортировали Sketch.h в свой контроллер .m? –

ответ

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.

+0

Я получаю исключение при попытке установить значение для экземпляра, созданного с помощью 'alloc] init]'. Насколько я понимаю, сеттер генерируется при добавлении в управляемый контекст, поэтому я боюсь, что не могу просто создать объект и установить значение свойства, как в любом другом классе. Мне не нужно добавлять их в управляемый контекст, так как они мне нужны только для uitableview – 4ntoine

+0

Мне не нужно вставлять его в управляемый контекст ('insertIntoManagedObjectContext'), так как некоторые другие операции могут выполняться с помощью db, и экземпляр будет непреднамеренно сохранен , Фактически вы создаете экземпляр, вместо этого добавляя в управляемый контекст с нуля, что нежелательно – 4ntoine

+0

Тогда не добавляйте его в контекст вообще. Единственное, почему это может быть даже необходимо? Если вам это нужно, я думаю, что что-то не так с вашей архитектурой. –