2013-05-28 40 views
1

我在我的實體類中有一個簡單的方法,它將自定義方法添加到我的子類NSManagedObject類(由於自動生成子類,我不會觸摸它)。爲什麼Core Data需要很長時間來保存對象?

我有這種方法,從MOC中刪除一個對象並保存上下文。

+ (void)deleteWishlist:(Wishlist *)wishlist 
    inManagedObjectContext:(NSManagedObjectContext *)context 
{ 

    [context deleteObject:wishlist]; 

    NSError *error; 
    if(![context save:&error]) { 
     NSLog(@"%@", error); 
    } else { 
     NSLog(@"Delete successful"); 
    } 
} 

我調用這個從我的視圖控制器之一,因爲這樣:

- (void)deleteWishlist:(Wishlist *)wishlist 
{ 
    if(wishlist) { 
     [Wishlist deleteWishlist:wishlist inManagedObjectContext:self.managedObjectContext]; 
    } 
} 

它從一個UI事件處理方法(委託tableView: commitEditingStyle: forRowAtIndexPath:方法)調用。

現在,這一切工作,但它需要很長時間來保存對象...我不知道這是否是默認行爲,但我希望它可以將立即刪除後永久存儲圖表。我不介意是否必須等到保存。

在iOS模擬器上,如果我點擊「停止」,然後再次加載我的應用程序,那麼願望清單仍然存在。如果我點擊主頁按鈕,應用程序會進入後臺模式,並且它會被保存......但它似乎將其保存了兩次。老實說,我不知道第一次做什麼。

2013-05-29 00:45:14.819 App[29024:c07] [WishlistCDTVC setFetchedResultsController:] set 
2013-05-29 00:45:14.820 App[29024:c07] [WishlistCDTVC performFetch] fetching all Wishlist (i.e., no predicate) 
2013-05-29 00:45:15.755 App[29024:c07] Delete pressed 
2013-05-29 00:45:16.666 App[29024:c07] NSManagedObjects did change. 
2013-05-29 00:45:16.669 App[29024:c07] NSManagedContext did save. 
2013-05-29 00:45:16.670 App[29024:c07] Delete successful 
2013-05-29 00:45:19.119 App[29024:c07] NSManagedContext did save. 

我做了什麼:加載願望清單VC,刷卡刪除,確認,它說'刪除按下'。從上下文中刪除對象,保存它(,但顯然不在這裏),然後說刪除成功(所以沒有錯誤),然後我點擊主頁按鈕,它記錄最後一個'保存'行,最後保存到永久存儲。那麼爲什麼中間的人不能節約?

+0

不同的背景? –

+0

@MikePollard我正在使用相同的共享上下文。 – swiftcode

+0

你的模型呢?你有幾個whishlists?願望清單是否與其他實體相關聯?如果是,您是否設置了級聯規則? –

回答

0

簡單的修復,我現在總是保存NSManagedDocument後,任何更改上下文(我不需要撤消功能)。

在我的共享文檔處理程序類中,我告訴它保存更改通知。

- (void)objectsDidChange:(NSNotification *)notification 
{ 
    #ifdef DEBUG 
     NSLog(@"NSManagedObjects did change."); 
    #endif 
    [BSDocumentHandler saveDocument]; 
} 

而且saveDocument就是一個類方法:

+ (void)saveDocument 
{ 
    UIManagedDocument *document = [[BSDocumentHandler sharedDocumentHandler] document]; 
    [document saveToURL:document.fileURL forSaveOperation:UIDocumentSaveForOverwriting completionHandler:nil]; 
} 

現在馬上節省,當我用站停車模擬器,現在保留了撲救。此外,爲了避免重複保存,我現在刪除了創建,編輯或刪除對象後包含託管對象上下文保存的所有行,並且我的共享文檔處理程序類自動管理所有保存,從而使重複代碼少得多。

我的日誌現在更清潔。這是執行刪除。我調用列出所有項目的VC,輕掃以刪除並確認。它注意到MOC發生了變化,並保存了一次文檔(如預期的那樣)。

2013-05-30 13:33:01.310 App[27167:c07] [ItemCDTVC setFetchedResultsController:] set 
2013-05-30 13:33:01.312 App[27167:c07] [ItemCDTVC performFetch] fetching all Item (i.e., no predicate) 
2013-05-30 13:33:04.735 App[27167:c07] NSManagedObjects did change. 
2013-05-30 13:33:04.751 App[27167:c07] NSManagedContext did save. 
相關問題