NSUserDefaultsController和NSArrayController有什么区别?

时间:2014-02-25 15:18:31

标签: objective-c binding xcode5 nsarraycontroller

我很高兴在界面构建器中使用了“Array Controller”对象。绑定就像魅力一样,一切都像魔术一样。

因此,我看了一下“用户默认控制器” - 认为它的工作方式与“阵列控制器”类似。令我惊讶的是,Xcode中没有绑定接口。我不得不通过代码将UI元素与用户默认值绑定。示例:

    [_cbPlaySound bind:@"value"
          toObject:[NSUserDefaultsController sharedUserDefaultsController]
       withKeyPath:@"values.playSound"
           options:[NSDictionary dictionaryWithObject:[NSNumber numberWithBool:YES]
            forKey:@"NSContinuouslyUpdatesValue"]];

一切都像它应该的那样。但为什么我不能像“阵列控制器”那样绑定“用户默认控制器”?

要明确:我确实对Apple文档进行了修改,但我仍然不明白为什么对我而言应该起作用的事情应该是相同的,但事实并非如此。

最佳。

1 个答案:

答案 0 :(得分:0)

您可以发布更详细的代码段吗?什么是_cbPlaySound?如果这是一个按钮或类似的东西,你可以转到Interface Builder并导航到Bindings Inspector(倒数第二个图标),你可以绑定到很多选项(Action Invocation,Availability,...) SharedUserDefaultsController那里。

回到你的问题:我认为这两者之间的区别在于NSUserDefaultsController是单身人士而NSArrayController不是。这意味着您在整个应用程序中只有一个UserDefaultsController实例,并且您只获得指向该实例的指针。如果您使用NSArrayController,则需要创建自己的实例,然后必须在Interface Builder中公开。

所以你并没有'拥有'UserDefaultsController,你也不需要将它作为一个对象添加到Interface Builder中。