【问题标题】:Reading settings bundle first time not returning correct values第一次读取设置包没有返回正确的值
【发布时间】:2014-06-14 15:54:56
【问题描述】:

我有一些代码正在从我的设置包中读取开关值,但是在某些情况下它读取了错误的值。

这就是我的代码的样子,它在我的应用委托 applicationDidBecomeActive

NSUserDefaults *settings = [NSUserDefaults standardUserDefaults];
NSNumber *branchString = [settings objectForKey:@"signout"];

BOOL userSignOut = [[settings objectForKey:@"signout"] boolValue];
NSLog(userSignOut ? @"Yes" : @"No");

当应用第一次加载时我收到 NO 然后当我切换到设置并将我的开关切换到 YES 时会发生什么,当我重新登录时我仍然收到 NO > 但是,如果我再次在设置和我的应用程序之间切换而无需触摸设置中的切换,那我就会得到 YES,即使它应该早一点发生。

【问题讨论】:

  • 你设置后是否调用了[[NSUserDefaults standardUserDefaults] synchronize]?
  • 当你说在我设置之后,你的意思是在我的问题中显示的第一行代码之后?
  • 不,在通过调用 [[NSUserDefaults standardUserDefaults] setObject:@(YES) forKey:@"signout"] 将其设置为 YES 之后
  • @JackWu 他在谈论设置应用程序正在更改的值。 setObject:forKey:没有相关电话。
  • 是的,工作..谢谢。我不明白为什么它在第一次阅读时不会只有正确的值。太奇怪了。

标签: ios objective-c boolean settings.bundle


【解决方案1】:

你在设置值的时候用这个吗?

[[NSUserDefaults standardUserDefaults] setObject:(id) forKey:(NSString *)];
[[NSUserDefaults standardUserDefaults] synchronize];

【讨论】:

  • 这与问题无关。
【解决方案2】:

你可以使用 NSUserDefaultsDidChangeNotification 作为观察者。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-26
    • 2019-03-21
    • 1970-01-01
    • 2014-07-15
    相关资源
    最近更新 更多