2015-03-02 53 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。 )

相关问题