2016-04-05 21 views
1

我有一個使用核心數據的小應用程序,並且NSPersistentDocument。對於新文檔,我用一個Settings元素初始化文檔。我已經可以抑制由初始化生成的撤銷條目,但...撤消問題:在標題欄中以編程方式初始化`NSPersistentDocument`

奇怪的行爲是這樣的:文檔在窗口標題中沒有「編輯」標誌開始。只要我點擊進入「編輯」菜單,就會出現「編輯」標誌,並且突然出現撤消操作。

這裏我init()代碼:

class Document: NSPersistentDocument { 
    var settings: Settings! = nil 
    override init() { 
     super.init() 
     do { 
      let fetchSettings = NSFetchRequest(entityName: "Settings") 
      let settingsList = try self.managedObjectContext!.executeFetchRequest(fetchSettings) 
      precondition(settingsList.count < 2, "Too many settings object in the core data store.") 
      if settingsList.count == 1 { 
       settings = settingsList[0] as? Settings 
       precondition(settings != nil) 
      } else { 
       managedObjectContext!.undoManager!.disableUndoRegistration() 
       settings = NSEntityDescription.insertNewObjectForEntityForName("Settings", inManagedObjectContext: self.managedObjectContext!) as? Settings 
       precondition(settings != nil) 
       // Here setup the "settings" object... 
       settings.xxx = //... 
       settings.yyy = //... 
       managedObjectContext!.undoManager!.enableUndoRegistration() 
      } 
     } catch { 
      preconditionFailure("Could not retrieve/create settings object because of an unknown core data error.") 
     } 
    } 
    // ... more methods ... 
} 

的問題是,一旦出現此撤銷條目,用戶可以撤消初始Settings對象引起許多麻煩的創建。

這是已知的問題嗎?我怎樣才能防止這種情況發生?

這裏這表明了效果的視頻:https://youtu.be/O4lURxLAelE

回答

2

呼叫

[self.managedObjectContext processPendingChanges]; 

disableUndoRegistrationenableUndoRegistration之前。