NSUserDefaults 没有在 Jenkins 的模拟器中保存内存

Posted

技术标签:

【中文标题】NSUserDefaults 没有在 Jenkins 的模拟器中保存内存【英文标题】:NSUserDefaults not saving in memory in simulator on Jenkins 【发布时间】:2016-03-08 02:40:08 【问题描述】:

我遇到了一种奇怪的情况,即 NSUserDefaults 在真实设备上运行良好,但在我们拥有的特定 Mac 的模拟器上却不行。

registerDefaults 工作正常:

NSUserDefaults.standardUserDefaults().registerDefaults(["Default1": 3, "Default2: false])

如果我运行NSUserDefaults.standardUserDefaults().dictionaryRepresentation(),这些默认值会包含在字典中。

但是,setObject 不起作用

NSUserDefaults.standardUserDefaults().setObject("abc", for Key: "ABC")
NSUserDefaults.standardUserDefaults().synchronize()

NSUserDefaults.standardUserDefaults().objectForKey("ABC") 在模拟器上总是返回 nil。

Mac 的这个问题是将 El Capitan 作为 Jenkins CI 服务器(作为启动代理)运行,我尝试在不同版本的模拟器(9.2、8.4...等)上运行该应用程序没有任何运气所以远的。有什么想法吗?

【问题讨论】:

setValue 方法怎么样,行得通吗? @Wongzigii setValue 也不行。 密钥区分大小写。 您是否尝试过删除并重新安装 Xcode 以及该 Mac 上 Library 文件夹中的所有 Xcode 相关文件? @DaveBatton 是的,尝试完全删除 xcode 并重新安装,仍然无法正常工作。 【参考方案1】:

我们自己也遇到过类似的情况,在我们完全重新安装操作系统 (El Capitan) 之前,我们决定尝试创建一个新用户 Jenkins2 作为正确的真实用户,即位于/Users/Jenkins2,而不是位于/Users/Shared/Jenkins 的*nux 风格安装。在解决了权限更改和移动文件带来的许多问题之后,这为我们解决了问题。

版本:OSX El Capitan、Jenkins v. 1.652 和 XCode 7.2.1

如果您束手无策,我建议您尝试获得一个在 Jenkins 下绝对无法运行的简单重现项目,然后在 XCode 中验证它在 Jenkins 之外也无法运行,但是当以 Jenkins 用户身份登录。如果是这样,您很可能遇到与我们相同的问题。以默认的 Mac 方式创建一个新用户,然后在那里尝试相同的项目。如果这对您来说是一个令人满意的解决方案,请将所有 Jenkins 设置移至该新用户,并删除旧用户。这就是我们最终所做的,从那以后我们就再也没有遇到过问题。

【讨论】:

以上是关于NSUserDefaults 没有在 Jenkins 的模拟器中保存内存的主要内容,如果未能解决你的问题,请参考以下文章

NSUserDefaults 没有在 Jenkins 的模拟器中保存内存

UIImage 没有从 NSUserDefaults 中检索

NSUserDefaults setObject 第一次没有保存

同步 NSUserDefaults 没有效果

有没有办法操纵 NSUserDefaults 存储的信息

如果我没有进行更改,为啥我需要同步 NSUserDefaults?