2010-04-22 67 views
1

在我的應用程序我有一個NSTableView綁定到ArrayController(arrangeObjects)。我也有一個詳細信息視圖(只是一些文本框)綁定到相同的控制器(選擇)。可可約束:手動提交更改?

現在每次編輯文本字段時,更改都會自動發送到ArrayController,並且表格也會更改。我怎樣才能避免這種情況?我想要的是一個「提交按鈕」。只有在按下按鈕時纔會將數據更改發送給控制器,而不是每次進行編輯時都自動發送。

回答

2

這個問題確實有兩個答案。第一個更哲學:在大多數情況下,你希望模型的更新瞬間發生。大多數情況下,用戶不需要爲保存,提交等而改變製作方式。 Binding與NSUndoManager的無縫整合意味着用戶所做的任何事情都可以撤銷(或者應該是可撤銷的)。所有用戶操作都應該是「低風險」的,以便進行更改然後撤消不會對用戶的數據或應用程序狀態造成不必要的「傷害」。如果您在模型圖層中使用Core Data,則可以始終使用NSManagedObjectContext的方法以編程方式回滾或保存一組更改。除非真有爲什麼用戶需要一個「提交」按鈕的好的理由,不要讓其中一個。按照這一理念,Gmail的「撤消發送」功能。即使發送電子郵件也應該是可撤銷的(在合理範圍內)。

第二個答案更實用。當然,在某些情況下,您正在處理的後端系統並不像Cocoa那樣寬恕undos。在這種情況下,最好的選擇是創建一個臨時模型對象,作爲UI的模型(可以考慮模型 - 視圖 - 視圖 - 模型(MVVM)架構中的視圖模型)。當用戶提交更改時,可以將臨時模型對象複製到持久模型中。在覈心數據中,您可以使用支持單獨管理對象上下文的內存中持久存儲來存放這些臨時實例,然後將此臨時上下文中的更改合併到提交的主上下文中。

0

這可能是不夠的:

  • 選擇Interface Builder中的文本字段。
  • 切換到「檢查器」面板的「文本字段屬性」窗格(按Cmd-1)。
  • 將操作彈出框更改爲「僅在輸入時發送」。