OSX NSUserDefaults无法正常工作

时间:2015-03-05 15:31:11

标签: objective-c macos nsuserdefaults

此代码在我的应用程序中始终没有。它确实适用于我复制它的任何其他项目......所以必须弄清楚我的standardUserDefaults,但我绝对不知道如何发生这种情况以及如何解决它!

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setBool:YES forKey:@"myKey"];

BOOL test = [defaults boolForKey:@"myKey"];
// test is ALWAYS NO here!

任何人都可以暗示我,从哪里开始或如何摆脱这个?

这是一个带有swift和objective c的混合项目,并且在AppDelegate.swift中获得相同的行为,当我将它直接放在我的applicationDidFinishLaunching中

let defaults = NSUserDefaults.standardUserDefaults()        
defaults.setBool(true, forKey: "myKey")

let test = defaults.boolForKey("myKey")
// test ALWAYS false here   

在有人问: - 是的,即使在它之间调用同步 - 是的,这是整个代码,行之间没有任何内容......设置并在不起作用后立即使用

1 个答案:

答案 0 :(得分:7)

我找到了一个解决方案,如何修复它,但不是为什么会发生这种情况,到目前为止还没有干净,好的方法。

如果有人能够解释这个并给我一个更好的解决方案,那就这样做吧!

  1. 问题是: 如果删除沙盒应用程序的容器,还会删除NSUserDefaults的plist,并且它不会再次创建,因此NSUserDefaults无法正常工作。

  2. 解决方法: 正如我在此处https://ind.ie/labs/blog/app-sandbox-updating-nsuserdefaults-fails-after-deleting-apps-container-directory/所发现的那样,系统的永久书签存在问题。 好吧,只是为了清空垃圾对我来说不起作用,但是有效:我只是创建了丢失的文件!

    touch ~/Library/Containers/com.example.myapp/Data/Library/Preferences/com.example.myapp.plist