2014-02-14 2 views
1

Я новичок в программировании IOS и пытаюсь изменить код, который разработчик написал для меня. У меня возникли проблемы в следующем кодеValueforkey в NSUserDefaults

NSUserDefaults *pref=[NSUserDefaults standardUserDefaults]; 
NSString *strUrl=[pref valueForKey:@"HistoryUrl"]; 

if (strUrl.length>0) 
{ 
    newUrl=strUrl; 

} 
else 
{ 
    [email protected]"http://www.google.com"; 
} 

Параметр, кажется сервис истории имеет значение «http://www.yahoo.com», хранящееся в нем. Я искал всюду и искал сеть о том, как заменить это значение на адрес google. Я даже прошел весь код в XCode и не могу найти, где объявлен historyurl:

  1. Где указано HistoryUrl?
  2. Как это можно изменить?

Заранее благодарен!

+3

Не используйте значение valueForKey: 'для чтения значения. Используйте 'objectForKey:'. – rmaddy

+0

Спасибо за комментарий rmaddy. Но мой вопрос в том, где объявляется HistoryURL и как я могу изменить его значение в XCode? Я не могу найти его ни в одном из файлов. – user1761133

ответ

1

@ "HistoryUrl" - это NSString *, содержащий строку HistoryURL. Вот как вы пишете NSString * с фиксированными данными.

pref - объект, представляющий предпочтения пользователя. Предпочтение пользователя содержит несколько пар ключ-значение. Например, может быть ключ с именем «HistoryUrl», который может иметь некоторое значение.

Метод valueForKey: метод считывает значение, которое хранится под ключом «HistoryUrl» и сохраняет его в strUrl. Если нет ключа с именем «HistoryUrl», тогда результат будет равен нулю.(Использование valueForKey: странно, потому что это не метод NSUserDefaults, обычно можно использовать objectForKey :)

Следующий код проверяет, имеет ли значение прочитанное какие-либо символы в нем (длина примерно соответствует числу символов); если есть какие-либо символы, то newUrl устанавливается на это значение; если символов не было, то newUrl устанавливается на NSString * "http: /www.google.com".

Так что кто-то в определенное время сохранил значение под названием «HistoryUrl» в файле предпочтений приложения. Вы удалите это значение с помощью вызова

[прив removeObjectForKey: @ «]» сервисом истории

Или, так как вы, кажется, не хотят ничего другого, кроме «Google», удалите весь код и просто написать NSString * NEWURL = @ "http://www.google.com" если это то, что вы хотите.

0

Где заявляется HistoryUrl?

Это не так. @"HistoryUrl" - это просто строка. Читайте на NSUserDefaults, чтобы узнать, как все это работает, но в двух словах система по умолчанию похожа на ассоциативный массив (также известный как словарь или карта), где вы можете использовать пары ключ/значение. В этом случае @"HistoryUrl" является ключом, а значение @"http://www.yahoo.com". Вы можете составлять все нужные вам ключи для хранения ваших значений.

Как его изменить?

Вы хотите изменить ключ или значение, связанное с ключом? Если первый, просто создайте другой ключ и используйте его. В последнем случае используют методы NSUserDefaults, чтобы установить другое значение:

NSUserDefaults *pref=[NSUserDefaults standardUserDefaults]; 
[pref setObject:@"http://google.com" forKey:@"HistoryUrl"]; 
[pref synchronize]; 

Замечание: при -synchronize вызов не является строго необходимым, так как система, как правило, пишут ваши изменения в конце концов. Но многие люди любят называть его всякий раз, когда они вносят изменения в систему по умолчанию.

+0

Спасибо! Дело в том, что я искал код, и я не могу найти его в yahoo.com. Есть ли способ установить значения для ключей в xcode отдельно от программно, что мне не хватает? – user1761133

+0

Проверьте вызов '-registerDefaults:', который может устанавливать значения по умолчанию для настроек. Кроме того, если ваше приложение имеет набор настроек, который также может устанавливать настройки по умолчанию. – Caleb

1

является сервисом истории произвольный ключ и он используется в коде для получения значения из NSUserDefaults. На каком-то этапе вашего кода вы захотите использовать setObject:forKey: для обновления значения, хранящегося в NSUesrDefaults. Вам также необходимо вызвать synchronize, чтобы сохранить новое значение после его установки.

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