2011-03-08 84 views
0

我有一個NSManagedObject派生類OrderMO具有NSDate類型的屬性OrderDate。我希望OrderDate的默認值是沒有訂單關聯的第一個月的第一個月的第一個星期一。如何根據現有NSManagedObject值在NSManagedObject派生類中設置默認值?

要做到這一點,我重寫NSManagedObject的awakeFromInsert功能和設置訂購日期的價值是這樣的:

- (void) awakeFromInsert 
{ 
    [super awakeFromInsert]; 
    [self setValue:[self getNextOrderDate] forKey:@"OrderDate"]; 
} 

自定義功能getNextOrderDate計算適當的日期和返回。問題是getNextOrderDate調用了executeFetchRequest,這在awakeFromInsert調用期間顯然是不允許的。我試過做this article中描述的內容,但它沒有解決我的問題。在那篇文章中,通過調用self performSelector將對executeFetchRequest的調用延遲到NSManagedObject被初始化之後,問題就解決了。在我的情況下,我只得到2個垃圾行。

我認爲我的訂單ArrayController的子類重寫添加函數,但真的不知道該怎麼做。

有人可以告訴我正確的方式來初始化一個NSManagedObject屬性基於同一個實體類型的現有NSManagedObjects,在同一個數組與值取決於現有對象的值?

回答

1

那麼,一種方法是做一個特定值的提取。這隻會返回一個字典,我很確定它不會觸發與獲取故障或對象相關的所有通知。你應該能夠提取你想要的一個日期,而無需啓動所有的花裏胡哨。但是,我從來沒有在這種特殊情況下進行過測試。

另一種方法是直接創建managedObject,就像非託管對象一樣,根據需要填充屬性,然後只將managedObject插入到上下文中。不是很優雅,但它會工作,它不會引發一堆通知。

某些核心數據手爲其NSManagedObject子類編寫自己的插入類方法。你可能想在這裏使用它。例如。

+(OrderMO *) insertOrderMOIntoManagedObjectContext:(NSManagedObjectContext *) aContext{ 
    OrderMO *newOrder=[[OrderMO alloc] init]; 
    // pefrom fetch on aContext to find the next order date 
    newOrder.orderDate=//... fetched order date 
    [aContext insertObject:newOrder]; 
}