0

我在覈心數據庫中有一些計算值,我需要在保存之前進行更新。基本上我編號的一些實體,以減輕他們之間的導航。撤銷管理器不與NSPersistentDocument保持同步

目前我正在觀察NSManagedObjectContextWillSaveNotification並試圖在此處進行編號。看來我所做的更改已經保存,但撤消管理器似乎仍然有一些修改。即使託管對象上下文表示它沒有(hasChanges),這使得文檔看起來像有變化(標記在關閉按鈕上)。如果我撤消一次,文檔看起來沒有變化,但是託管對象上下文確實沒有變化。

撤消管理器以某種方式重置自己在錯誤的地方或我做錯了什麼?

更新

的有點混淆代碼中,我這樣做重新編號如下:

- (void)managedObjectContextWillSave:(NSNotification *)notification 
{ 
    // Force the content view controller to save any pending changes. 
    [_contentViewController saveChanges]; 

    NSArray *itemSortDesc = [self sortDescriptorsForSomeItem]; 
    NSArray *items = [SomeItem findAllObjectsInContext:self.managedObjectContext 
              andSortBy:itemSortDesc]; 
    NSUInteger i = 0; 
    for (SomeItem *i in items) 
    { 
     i.uid = [NSNumber numberWithUnsignedInteger:i++]; 
    } 
} 

_contentViewController包含將被解析到的SomeItem多個實例的文本字段。

+0

你會發布處理該事件的代碼嗎? – paulmelnikow

回答

0

我猜你的編號影響撤消堆棧。

我可能會嘗試在NSManagedObject willSave而不是使用NSManagedObjectContextWillSaveNotification,但我懷疑這不會解決您的問題。

你可以試試這個:

[[self.managedObjectContext undoManager] disableUndoRegistration]; 

// do the renumbering 

[self.managedObjectContext processPendingChanges]; 
[[self.managedObjectContext undoManager] enableUndoRegistration]; 

我利用這一點避免初始化過程中弄髒了一個全新的文件。我不確定它可以正確保存,但它可能值得嘗試。

+0

這工作,謝謝。但是,由於某種原因,保存後有一兩個空的撤消步驟,但我認爲這可能與重新編號有關,因爲即使項目的uid在任何情況下都被重新計算,即使它沒有改變。我想我會考慮在文本字段解析後立即重新編號。 – mkko