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 的模拟器中保存内存