此代码在我的应用程序中始终没有。它确实适用于我复制它的任何其他项目......所以必须弄清楚我的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
在有人问: - 是的,即使在它之间调用同步 - 是的,这是整个代码,行之间没有任何内容......设置并在不起作用后立即使用
答案 0 :(得分:7)
我找到了一个解决方案,如何修复它,但不是为什么会发生这种情况,到目前为止还没有干净,好的方法。
如果有人能够解释这个并给我一个更好的解决方案,那就这样做吧!
问题是: 如果删除沙盒应用程序的容器,还会删除NSUserDefaults的plist,并且它不会再次创建,因此NSUserDefaults无法正常工作。
解决方法: 正如我在此处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