我有一个简单的模型Foo
,它代表用户偏好并封装了一个NSString
和一个NSNumber
. 我想Foo
在用户默认值中存储一个 's 数组,以便它们在应用程序启动之间持续存在;我想在表格视图中显示它们,以便用户可以添加、删除和编辑它们。使用绑定的解决方案似乎非常简单,但事实证明我无法真正开始工作。
当我的应用程序启动时,我注册了NSUserDefaults
一个初始数组的键控存档Foo
。在我的 XIB 中,我有一个数组控制器,其内容数组绑定到共享用户默认控制器的values
控制器键;关键路径为foos
; 选中“将内容作为复合值处理”;并NSKeyedUnarchiveFromData
作为价值转换器。然后,表格视图又被绑定到数组控制器,表格的列被绑定到Foo
.
Foo
当从数组中添加和删除 '时,这非常有效——foos
用户默认值中的键被更新以反映数组的新内容。问题是对个人属性的更改Foo
不会类似地触发将数组写回用户默认值。我相信原因在'<a href="https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/KeyValueObserving/Articles/KVODependentKeys.html#//apple_ref/doc/ uid/20002179-SW5" rel="nofollow noreferrer">Key-Value Observing Programming Guide 中“注册依赖键”的多对多关系部分:观察到对数组控制器的数组本身的更改,但对包含的元素不是。
尽管认识到这是一个问题,但我终其一生都无法弄清楚为了完成这项工作而实际做什么。当我观察到Foo
什么对象发生变化时,我需要通知什么消息,以便将整个数组写回用户默认值——<code>NSUserDefaults, NSUserDefaultsController
, NSArrayController
? 我希望 Apple 文档不仅仅粗略地提到这个问题,并提供了一些实际的示例代码来解决它——我已经尝试了所有方法,但我找不到魔法咒语。
这类似于如何通过 NSArrayController 获得模型更改通知,但我无法在他使用自定义视图所做的事情和使用bind:toObject:withKeyPath:options:
.
谢谢!:)