【问题标题】:OSX NSUserDefaults not WorkingOSX NSUserDefaults 不工作
【发布时间】:2015-03-05 15:31:11
【问题描述】:

此代码在我的应用程序中总是给我“否”。它确实可以在我复制它的任何其他项目中工作......所以我的标准用户默认值一定是搞砸了,但我绝对不知道这是怎么发生的以及如何解决它!

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

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

谁能提示我,从哪里开始或如何摆脱这个?

这是一个包含 swift 和 Objective c 的混合项目,当我将它直接放在我的 applicationDidFinishLaunching 中时,它在我 AppDelegate.swift 中得到相同的行为

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

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

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

【问题讨论】:

  • 你如何检查test的值?
  • 检查:NSLog(test ? @"Yes" : @"No"); Btw 任何想知道这种语法的人,它被称为三元运算符。
  • 我使用 NSLog 并直接在带有断点的调试器中进行了检查。还使用了同步和签入文件...文件永远不会创建! - 但我发现了一些东西:当我改变我的包标识符时它可以工作......但我不能改变这个!它已在 itunes connect 中注册(它是一个沙盒应用商店应用程序) - 该应用程序以前工作过,当此行为开始时我无法弄清楚我的版本控制发生了变化......永远不要更改捆绑 ID。
  • 我的应用程序本身从不使用 NSUserDefaults,它是其他库,如 dropbox.framework 或 Google API。我不知道要为他们注册什么,到目前为止他们都失败了,因为 NSUserDefaults 没有存储任何信息。 - 并且更改捆绑 ID 只工作了一次。删除钥匙串中的容器和条目以重新启动并再次测试全新安装后,它再次失败...有什么我想删除的东西(甚至从 XCode 中删除了 derivedData)
  • 找到了这个:ind.ie/labs/blog/… - 但即使是空垃圾,它也没有重新创建或再次工作..

标签: objective-c macos nsuserdefaults


【解决方案1】:

我找到了一个解决方案,如何解决它,但不知道为什么会发生这种情况,也没有干净、好的方法。

如果有人可以解释这一点并给我一个更好的解决方案,请这样做!

  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
    

【讨论】:

  • 谢谢!这可能节省了我几个小时。
猜你喜欢
  • 1970-01-01
  • 2017-09-07
  • 2014-03-12
  • 1970-01-01
  • 1970-01-01
  • 2013-10-22
  • 2011-08-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多