【问题标题】:NSUserdefaults works on Simulator but not on DeviceNSUserdefaults 适用于模拟器但不适用于设备
【发布时间】:2011-12-10 08:58:51
【问题描述】:

我想将NSArray 保存到NSUSerDefaults。如果我在模拟器上做,一切正常,如果我在设备上做,它就不行。

NSArray *Test1 = [Daten copy];
NSArray *Test2 = [Kosten copy];

[prefs setObject:Test1 forKey:@"Daten"];
[prefs setObject:Test2 forKey:@"Kosten"];

我正在使用上面的代码。

prefs 是一个普通的NSUserDefaults,就像NSUserDefaults *prefs = [NSUserDefaults standartUserDefaults];...

Daten 和 Kosten 是可变数组,可以使用。

一切都在模拟器上运行,但在设备上它不起作用......

有人有想法吗?

【问题讨论】:

    标签: xcode nsmutablearray nsarray nsuserdefaults


    【解决方案1】:

    您是否在设置/更新后同步它们?

    [[NSUserDefaults standardUserDefaults] synchronize];
    

    【讨论】:

    • 是的,它很重要.. 把它放在 "[prefs setObject:Test2 forKey:@"Kosten"];" 之后看看你是否能够从 nsuserdefaults 取回数据
    • 不,没有任何变化……该死,为什么它在模拟器上可以工作,但在设备上却不行?!?
    • 嗯,会不会是ios5的原因?我在模拟器上使用 xcode 3.2.5 和 ios4 进行编程,但在设备上使用 ios5...
    • 在 iOS4 或更高版本中,您的用户默认设置在按下主页按钮时可能不会被保存。在 applicationDidEnterBackground: 中手动调用 [[NSUserDefaults standardUserDefaults] synchronize] 应确保正确保存您的用户默认值(这实际上应该是 IMO 的内置行为)。
    • 嗨,我解决了 :-) 这是我的错...我在保存过程之前对文本字段进行了resigntofirstresponder...所以他只是没有保存它并辞职给firstresponder ....疯狂的是...在 ios 4 上它工作了 ;-) 感谢您的所有帮助...您可以关闭或删除它,因为我认为它没有有趣的东西 :-)
    【解决方案2】:

    因为 Saurabh 让我发布我的解决方案,所以我会为其他读者做。

    我的问题代码如下:

    [derText1 resignFirstResponder]
    [derText2 resignFirstResponder]
    
    NSArray *Test1 = [Daten copy];
    NSArray *Test2 = [Kosten copy];
    
    [prefs setObject:Test1 forKey:@"Daten"];
    [prefs setObject:Test2 forKey:@"Kosten"];
    

    这适用于带有 XCode 3.2.5 的 iPhone 4 模拟器,但不适用于安装了 iOS 5.x 的设备。

    所以我已经从 Apple 下载并安装了最新的 XCode 版本。

    之后它也不适用于模拟器。看起来问题仅出在 iOS 5 软件上。

    比我简单地将我的代码更改为:

    NSArray *Test1 = [Daten copy];
    NSArray *Test2 = [Kosten copy];
    
    [prefs setObject:Test1 forKey:@"Daten"];
    [prefs setObject:Test2 forKey:@"Kosten"];
    
    [derText1 resignFirstResponder]
    [derText2 resignFirstResponder]
    

    它可以在最新 iOS 的设备和模拟器上运行。看看辞职的 First Responder Entrys 的位置。他们似乎必须在保存之后。我不知道为什么,但它确实有效。

    【讨论】:

      【解决方案3】:
      NSArray *Test1 = [Daten copy];<p>
      NSArray *Test2 = [Kosten copy];<p>
      
      
      NSUserDefaults *prefs;<p>
      prefs= [[NSUserDefaults standardUserDefaults]setObject:Test1 forKey:@"Daten"];<p>
      
      [[NSUserDefaults standardUserDefaults] synchronize];
      
      prefs= [[NSUserDefaults standardUserDefaults]setObject:Test2 forKey:@"Kosten"];<p>
      
      [[NSUserDefaults standardUserDefaults] synchronize];
      

      【讨论】:

        猜你喜欢
        • 2012-11-01
        • 2011-03-08
        • 2015-02-13
        • 2011-03-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多