objective-c - cocoa 偏好被覆盖

标签 objective-c xcode cocoa

我有几个关于使用 NSUserDefaults 的应用程序首选项的问题。

在我的上一个应用程序中,我将使用绑定(bind)将我的首选项链接到 NSUserDefaults,这非常有效。在应用程序启动方法中,我可以根据 NSUserDefaults 中存储的值执行操作。

当我更新我的应用程序并重新分发它时,出现了问题,其中所有设置都会被我计算机中的首选项覆盖。因此,如果有人更改了设置,然后收到了更新,他们的设置将被我的设置覆盖。

回顾有关保存首选项的 Apple 文档,我注意到以下行我没有使用,它用于将首选项写入磁盘:

[defaults synchronize];

我的问题是,这段代码是否将首选项写入用户的硬盘驱动器,以便如果我使用不同的设置重新分发应用程序,NSUserDefaults 将从磁盘读取?

很抱歉造成误解,但我找不到答案。

提前感谢大家。

最佳答案

如果您想使用绑定(bind)来控制您的首选项,您应该使用NSUserDefaultsController。无论哪种情况,要为默认值设置初始值,您都应该创建一个包含初始值的字典,然后将其传递给 registerDefaults:(如果您使用的是普通 NSUserDefaults 或 initWithDefaults 之一) :initialValues:setInitialValues:(如果您使用的是 NSUserDefaultsController)。这是一个 NSUserDefaultsExample:

- (void)applicationDidFinishLaunching {
    // For decent-sized applications, I normally like to store this in its own plist
    // but I'm creating it in-line here for readability's sake.
    NSDictionary *initialPreferences = [NSDictionary dictionaryWithObjectsAndKeys:
        [NSNumber numberWithInteger:21], @"UserAge",
        @"red", @"FavoriteColor",
        @"Idaho", "Location", nil];
    [[NSUserDefaults standardUserDefaults] registerDefaults:initialPreferences];
}

关于objective-c - cocoa 偏好被覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10401340/

相关文章:

objective-c - 网络存储设计模式

ios - 如何一次将事件从外滚动传递到内滚动

ios - RestKit 中发送两个请求然后仅在两个请求返回后才执行操作的最佳方法是什么?

ios - 在应用程序运行时在 AppDelegate 中运行 didFinshLaunchingWithOptions?

xcode - 您可以在没有按钮的情况下以编程方式关闭 View Controller 吗? - 操作系统

Xcode 5.0.1 : How to make folders appear on top of files in the Project Navigator

cocoa - 打印问题: Setting Paper feed

objective-c - UIPageControl 加载新 View 或不同的 Controller

macos - 如何创建始终在后台运行并收集位置的Mac应用程序?

cocoa - 使用 NSToolBar Outlet xcode 6 和 Storyboard?