我想使用我的自定義NSManagedObject就像一個普通的對象(以及它的常規函數)。是否有可能修改類以便能夠像普通對象一樣初始化它?iPhone - 更改實體類(NSManagedObject),使它們可初始化
[[myManagedObject alloc] init];
感謝
編輯:澄清的問題,將其擰一切,如果我在執行改變@dynamic與@synthesize?
我想使用我的自定義NSManagedObject就像一個普通的對象(以及它的常規函數)。是否有可能修改類以便能夠像普通對象一樣初始化它?iPhone - 更改實體類(NSManagedObject),使它們可初始化
[[myManagedObject alloc] init];
感謝
編輯:澄清的問題,將其擰一切,如果我在執行改變@dynamic與@synthesize?
託管對象上下文是NSManagedObject的必需屬性,因此您無法正確初始化它的實例而無需將其插入到上下文中。它看上下文來理解它的實體,並在其任何屬性發生變化時通知上下文。
@dynamic和@synthesize只是編譯器指令。只要你自己提供適當的getter和setter,你就可以從@dynamic切換到@synthesize。由於NSManagedObject嚴重依賴於鍵值觀察功能,因此您必須編寫符合KVO標準的訪問器。
如果你需要初始化一個NSManagedObject子類,你可以覆蓋awakeFromInsert
,它可以讓你在創建實例時提供自定義。您也可以在每次使用awakeFromFetch
獲取對象時自定義該對象。
我經常在我的一個應用程序中這樣做。我的方法是用下列方法初始化對象:
-(id)initWithEntity:(NSEntityDescription *)entity insertIntoManagedObjectContext:(NSManagedObjectContext *)context
傳遞nil作爲上下文。要獲取實體描述,您需要訪問managedObjectContext。我傾向於在我的應用程序啓動時獲取實體描述,然後將其存儲在我的應用程序委託中的實例變量中。
下面是一個例子:
//inside my "Engine" class
self.tweetEntity = [NSEntityDescription entityForName:@"Tweet" inManagedObjectContext:self.moc];
//later on when I want an NSManagedObject but not in a managed object context
Tweet *tweet = [[[Tweet alloc] initWithEntity:self.engine.tweetEntity insertIntoManagedObjectContext:nil] autorelease];
這允許我使用NSManagedObjects沒有將它們存儲在數據庫中。後來,如果我決定將對象插入到我的數據庫中,我可以將它插入到託管對象上下文中:
[self.moc insertObject:tweet];
謝謝......現在看起來更清楚了!我想要做的是在持久存儲之外使用這些類(如常規對象);這似乎是不可能的 – ncohen 2010-04-23 17:02:55