2015-03-02 54 views
0

我有一個非常簡單的項目,包含一個NSTableView與3列和按鈕添加新行,刪除行和保存數據。是NSTableVIew綁定到NSArrayController不保存更改

對於這個項目,我想的值保存到NSUserDefaults的DB和做這一切,沒有編碼的目的,所以IB連接和性能如下:

新增通過IB陣列控制器對象。其控制器內容綁定到共享用戶默認值控制器(控制器鍵:值,模型鍵路徑:myvalues),將內容作爲複合值處理。

添加設置爲具有3列,並設置爲基於視圖的表格視圖。

對於表視圖本身,它的內容被綁定到陣列控制器(控制器密鑰arrangedObjects)及其選擇性指標篩選結合到陣列控制器(控制器密鑰selectionIndexes)

對於表的每一列,表視圖單元格項(鏈中的第三個)Value綁定到Table Cell View(控制器鍵爲空,模型鍵路徑設置爲objectValue.xxxx,其中xxxx是該列的任意名稱字符串);行爲屬性也設置爲「可編輯」。

將添加行和刪除行按鈕發送操作連接到陣列控制器添加和刪除方法,並將保存按鈕發送操作鏈接到共享用戶默認值保存方法。

當我運行項目時,我最初可以「添加」,輸入列的值,單擊保存,結束執行,當我重新運行它時顯示數據。但是,如果我然後嘗試更改任何數據,則更改將不會保留。如果我添加額外的行,並輸入數據不保留(行將在那裏,只是空的)。刪除行按預期工作。 (注:另外,如果我加入的初始執行幾行,只有第一個將不得不在後續執行數據)

我的問題是:爲什麼不將數據更改(第一後)工作?似乎有某個地方有一個缺失的圖層。

我創建了第二個項目,與第一個非常相似,但指定了基於單元格的表格而不是基於視圖;對於表視圖,NO綁定也更簡單,但直接將表單元格Value綁定到Array控制器。這個項目完美運作。單元格數據可編輯,進入新的行數據等

任何幫助,將不勝感激

+0

複製http://stackoverflow.com/q/27308592/1312143我回答,雖然我從來沒有聽說過回如果我的回答工作的。試試看看。 – 2015-03-02 22:59:58

+0

感謝您的迴應;因爲我的目標是在沒有任何編碼的情況下做到這一點,我想我現在只需堅持基於單元格的表格。如果我將來嘗試你的方法,會讓你知道它是否有效。 – user2132980 2015-03-03 14:16:12

回答

-1

由於基於細胞的表工作正常,沒有編碼,我將使用現在。至於獲得基於視圖表正常工作,它出現(從Ken的筆記和其他SO線程),該管理的內容很可能被正確更新,但用戶默認控制器不被識別這些更改的。因此,一個簡單的解決方法是在AppDelegate中applicationWillTerminate方法添加幾行代碼,例如:

let ac : NSArray = arrayController!.arrangedObjects as NSArray 
NSUserDefaults.standardUserDefaults().setObject(ac, forKey: "myvalues") 

其中arrayController爲IB陣列控制器的出口。 (這有點矯枉過正,因爲它會在每次運行應用程序時設置對象,但是您也可以將SAVE按鈕連接到一個方法,該方法將設置一個Bool,然後在請求保存時有條件地發出setObject。 )

相關問題