2013-07-04 32 views
1

是否可以防止核心數據持久化對象?防止核心數據持久化對象

比方說,如果我有NSManagedObject子類BOOL屬性isTemporary

所以,當保存已經呼籲方面,我會做的對象進行檢查:

if (self.isTemporary) { 

// Do not save 

} else { 

// Save this object 

} 

編輯:對於這個問題

嗯更多的背景信息,以澄清我的問題,我創建一個對象,如果它已經存在我是我的數據庫獲取它,如果它不存在我插入它,並設置該對象的臨時標誌爲YES。我設置了標誌,因爲在這個階段如果用戶將執行保存或取消操作,尚不清楚。如果他節省,我會將該旗暫時設置爲NO。如果他取消了,那麼如果臨時標誌爲YES,我將刪除該對象。

到目前爲止,雖然我不希望它們持續存在(因爲它們應該是臨時的),但在此期間背景中可能發生核心數據保存操作。所以,如果我不幸並且應用程序被殺死,我可能會將不需要的對象的臨時標誌設置爲YES。一種選擇是在啓動應用程序時執行清理操作,以刪除具有臨時標誌YES的對象。但是如果不能保持這些對象,一切都會變得容易很多。

回答

1

正確,這是如何做到的。

if (self.isTemporary && self.managedObjectContext) { 
    [self.managedObjectContext delete:self]; 
} 

注意一個NSManagedObjectmanagedObjectContext變爲零,一旦它被刪除。

+0

很好,但是我在做什麼'NSManagedObject'子類的方法執行此檢查? ' - (void)willSave'? –

+0

嗯,我不得不刪除對象,如果我不想它持續?我寧願保留它... –

+0

1)是的,'willSave'是覆蓋的方法。 2)如果你想保留它,保存它;-)(但保持isTemporary標誌)。 – Mundi

0

如果你想防止Core Data從堅持你的ManagedObject,換句話說,如果你不想被寫入的文件在你的對象,則可以通過初始化做到這一點你ManagedObject在下列方式:

@implementation MyManagedObject 

- (id) init 
{ 
    NSEntityDescription* entity = [NSEntityDescription entityForName:@"MyEntity" inManagedObjectContext:managedObjectContext]; 
    self = [super initWithEntity:entity insertIntoManagedObjectContext:Nil]; 
} 

@end 

現在,如果你想保存的對象,它保存在以下方式:

[managedObjectContext insertObject:myManagedObject]; 
NSError* error; 
if ([managedObjectContext save:&error]) { 
    NSLog(@"Successfully saveed ManagedObject!");              
} else { 
    NSLog(@"Failed to save ManagedObject!"); 
} 

希望這有助於!