NSUserDefaults 在 IOS 8 模拟器上不起作用 [重复]

Posted

技术标签:

【中文标题】NSUserDefaults 在 IOS 8 模拟器上不起作用 [重复]【英文标题】:NSUserDefaults not working on IOS 8 simulator [duplicate] 【发布时间】:2014-10-07 06:48:07 【问题描述】:

以前我的NSUserDefaults 工作正常,但最近升级到ios 8 后,它在我的模拟器中失败(不确定真实设备,因为我在真实设备上没有iOS 8)。我已经在iOS7 上进行了测试,它可以在模拟器和真实设备上运行。所以我不确定是iOS 8 问题还是只是iOS 8 模拟器问题。

我的问题是即使保存后它总是返回空字符串。

我的代码如下:

+(void)SetStringValueForConfigurationKey: (NSString *) _objectkey withValue:(NSString *)_value

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults synchronize]; //let's make sure the object is synchronized
    [defaults setValue:_value forKey:_objectkey];
    [defaults synchronize];//make sure you're synchronized again


+(NSString *)GetStringValueForConfigurationKey: (NSString *)_objectkey

    //create an instance of NSUserDefaults
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults synchronize]; //let's make sure the object is synchronized
    if ([defaults stringForKey:_objectkey] == nil )
    
        //I don't want a (null) returned
        return @"";
    
    else
    

        return [defaults stringForKey:_objectkey];
    

有什么方法可以将模拟器升级到iOS 8.0.2?或者我怎样才能找到问题的原因?

谢谢。

【问题讨论】:

你用 valueforkey 试过了吗? 【参考方案1】:

你尝试设置

[defaults setValue:_value forKey:_objectkey];

但你以后再拿

return [defaults stringForKey:_objectkey];

请尝试

[defaults setObject:<#(id)#> forKey:<#(NSString *)#>];
[defaults objectForKey:<#(NSString *)#>];

【讨论】:

感谢您的建议..【参考方案2】:

我找到了根本原因,iOS 7 和 iOS 8 之间的行为不同。

更详细地说,我在登录屏幕中遇到了这个问题。在登录屏幕本身,我有一个选择需要用户选择,我通过“部分卷曲”转换放入另一个视图控制器。问题发生在这个过渡。

问题出在以下代码中:

-(void)viewDidAppear:(BOOL)animated
    [super viewDidAppear:animated];


在 iOS 7 中,此函数仅在首次加载时调用一次。但在 iOS 8 中,从“Partial Curl”VC 转换回原始登录 VC 时再次调用它。

这就是问题出现的地方。我在这个函数中重置了我所有的 NSUserDefaults 值,因此在 iOS 8 中,每当我存储并传输回登录 VC 时,所有值都消失了。从而返回空值。我通过更改此函数中的逻辑以适应 iOS 8 中的多次调用来解决我的问题。

【讨论】:

以上是关于NSUserDefaults 在 IOS 8 模拟器上不起作用 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

iOS 8 beta 5 中的今日扩展的 NSUserDefaults 是不是被破坏?

NSUserDefaults 不在 iOS 8 中的应用程序和自定义键盘之间存储值

如何使用 Xcode 9.3 在 iOS 开发设备中检查 [NSUserDefaults standardUserDefaults] [重复]

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

在模拟器上卸载应用程序后,NSUserDefaults未清除

为啥在 iOS 中使用 NSUserDefaults?