Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios defaultPrefs未更新_Ios_Objective C_Plist - Fatal编程技术网

Ios defaultPrefs未更新

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

我已经创建了一个Prefs控制器类,它控制我的Prefs值。我的prefs中有两个特定的值,一个是installSelected,另一个是finishSelected,我将它们设置为T或F的字符串

当应用程序第一次启动时,我会创建新的pref,并且这些值会自动设置为F,因为它们是plist bundle中的默认值。随后在应用程序中,我将installSelected覆盖为T。当我重新启动应用程序时,它返回正确的值为T。然后我使用F再次写入。我再次重新启动,但当我读取值时,它仍然显示T,当它应为F时

我已经调试了这个,我只是不知道为什么它没有保存值

这是用于写入新值的prefController方法的外观:

- (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。。。。。