Ios defaultPrefs未更新
我已经创建了一个Prefs控制器类,它控制我的Prefs值。我的prefs中有两个特定的值,一个是installSelected,另一个是finishSelected,我将它们设置为T或F的字符串 当应用程序第一次启动时,我会创建新的pref,并且这些值会自动设置为F,因为它们是plist bundle中的默认值。随后在应用程序中,我将installSelected覆盖为T。当我重新启动应用程序时,它返回正确的值为T。然后我使用F再次写入。我再次重新启动,但当我读取值时,它仍然显示T,当它应为F时 我已经调试了这个,我只是不知道为什么它没有保存值 这是用于写入新值的prefController方法的外观:Ios defaultPrefs未更新,ios,objective-c,plist,Ios,Objective C,Plist,我已经创建了一个Prefs控制器类,它控制我的Prefs值。我的prefs中有两个特定的值,一个是installSelected,另一个是finishSelected,我将它们设置为T或F的字符串 当应用程序第一次启动时,我会创建新的pref,并且这些值会自动设置为F,因为它们是plist bundle中的默认值。随后在应用程序中,我将installSelected覆盖为T。当我重新启动应用程序时,它返回正确的值为T。然后我使用F再次写入。我再次重新启动,但当我读取值时,它仍然显示T,当它应为F
- (void) writeBool:(NSString *)name MyBool:(NSString *)myboolString {
prefs = [NSUserDefaults standardUserDefaults];
if ([name isEqualToString:@"InstallsSelected"]) {
[prefs setObject:myboolString forKey:name];
}
else if ([name isEqualToString:@"FinishSelected"]) {
[prefs setObject:myboolString forKey:name];
}
[prefs synchronize];
}
我这样调用上面的方法
[prefsController writeBool:@"InstallsSelected" MyBool:@"F"];
它不能工作是毫无意义的,因为我可以将它从F改为T,但如果需要的话不能再改回来,而且所有代码都不一样。什么可能导致此问题?您是在模拟器上还是在真实设备上?我在模拟器中获得正确的同步时遇到了严重问题。事实证明,如果只是从xCode重建,则不会保存用户首选项。如果您将应用程序带到模拟器的后台(按cmd-shift-H),则会保存它们
另外,尽可能多地记录NSLog有助于查看prefs中写入的内容。为什么要使用字符串而不是布尔值 您必须使用以下命令设置布尔值:
// Notice setBool
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"pref"];
然后调用synchronize:
[[NSUserDefaults standardUserDefaults] synchronize];
要检索该值,请调用:
// Notice boolForKey
if(![[NSUserDefaults standardUserDefaults] boolForKey:@"pref"]) {
// False
} else {
// True
}
要注册默认Pref,请使用:
NSDictionary *appDefaults = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:YES], @"pref1",
[NSNumber numberWithBool:YES], @"pref2",
nil];
NSUserDefaults * prefs = [NSUserDefaults standardUserDefaults];
[prefs registerDefaults:appDefaults];
天啊,对不起,我编辑这个关键字是为了表示一些有意义的东西,因为目前它有点像jibberish,但我可以向你保证,我的代码中的情况是正确的。。。很抱歉,我已更新了我的问题。我正在设备上执行此操作。。。但是,我的重建包括按下xcode中的run按钮。。我想我会试着把它断开,然后从它的运动中走出来。。我会告诉你我怎么走的。我已经一步一步地跟踪程序,所以通过遵循这些程序很容易判断它是否有效。是的,它仍然不能正常工作。逻辑非常简单,所以它不是因为某些原因,当从F写入TT时,值没有正确保存。我遇到了一个奇怪的问题,在启动应用程序时,它不会用默认值实例化。因此,我不得不在启动后进行编程设置,这是我不喜欢的。所以我决定用一根对我来说一直很好的绳子来做,直到现在。好的,谢谢,我现在就来试试。。可能需要一点时间,但我会确保带着任何问题或答案回来。你成功了吗?:)不,我还在努力。我不想改成Bool,逻辑很好,只是我做的这个愚蠢的prefrence控制器类没有按它应该的方式工作。它将更新为True fine,但永远不会更新回False。。。。。