2010-05-06 2 views
0

У меня есть настройка в Root.plist с Key = 'latestNews' типа PSToggleSwitchSpecifier и DefaultValue как проверяемое булевое. Если я правильно это понимаю, он должен = ДА, когда я введу его в свой код. Я пытаюсь проверить это значение и установить int var, чтобы передать его моему скрипту php. Что происходит, так это то, что мое логическое значение - либо nil, либо NO, а затем my int var = 0. Что я делаю неправильно?Как проверить настройку bool в моем приложении iphone


    NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; 

    int latestFlag = ([[prefs objectForKey:@"latestNews"] isEqualToString:@"On"]) ? 1 : 0; 

    NSString *urlstr = [[NSString alloc] initWithFormat:@"http://www.mysite.com/folder/iphone-test.php?latest=%d", latestFlag]; 
    NSURL *url = [[NSURL alloc] initWithString:urlstr]; 

    //these are auto-released 
    NSString *ans = [NSString stringWithContentsOfURL:url]; 
    NSArray *listItems = [ans componentsSeparatedByString:@","]; 

    self.listData = listItems; 

    [urlstr release]; 
    [url release]; 

ОБНОВЛЕНО: Реальная проблема заключается в том, что я не в состоянии получить любые значения параметров. Я изменил значение boolean на строку, аналогичную примеру книг. Итак, теперь моя настройка имеет TrueValue = "Вкл." И FalseValue = "Выкл." С DefaultValue = "Вкл.". Теперь я пытаюсь восстановить этот параметр с помощью кода выше. Он должен = «Вкл.», Если это значение DefaultValue, однако мой int завершается = 0, что говорит о том, что я вообще не читаю настройки.

+0

Я все еще расследую, но я начинаю думать, что проблема связана с подключением моего приложения к Settings.bundle. Пример приложения AppSettings в книге начинается с шаблона приложения Utility - и мое приложение представляет собой стандартное приложение на основе View. Поэтому я пытаюсь сравнить некоторые другие коды различий. – dusk

ответ

2

Когда вы устанавливаете логическое значение, создайте его так, чтобы никогда не устанавливать его так же, как и false. Если вы хотите, чтобы флажок был установлен по умолчанию, установите его для проверки, когда значение ложно, и снимите флажок, когда значение равно true.

В вашем случае измените имя на «notLatestNews» и измените логику, чтобы она соответствовала.

BOOL latestNews = ![[NSUserDefaults standardUserDefaults] boolForKey:@"notLatestNews"]; 
+0

Думаю, я понимаю, что вы говорите. Однако в файле plist, если вы установили «DefaultValue» в тип «Boolean», поле значения изменяется на флажок. Если вы установите этот флажок, то значение по умолчанию для этого параметра должно всегда быть «ДА» правильным? Я могу изменить свою логику, но я думаю, что моя проблема сохраняется, что я неправильно читаю значение настроек. – dusk

+0

Нет ничего, что требовало бы, чтобы ДА коррелировала с отмеченным флажком. Если вы предпочитаете не инвертировать значение предпочтения, вы можете иметь предпочтение «defaultsVersion», и если оно не соответствует вашей текущей версии, установите его вместе с любыми настройками, которые должны иметь значение по умолчанию. Если вы просто хотите отличить nil от YES и NO, используйте objectForKey, чтобы проверить нуль перед использованием boolValue, а не просто boolForKey. – drawnonward

+0

Просто хотел отметить, что я принимаю 3-х дневный уик-энд. Поэтому я вернусь в это утро понедельника и дам вам знать результаты. В очередной раз благодарим за помощь. StackOverflow - это потрясающе! – dusk

Смежные вопросы