2014-02-14 42 views
1

我是IOS編程新手,正在嘗試修改開發人員爲我寫的代碼。我在下面的代碼Valueforkey in NSUserDefaults

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

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

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

的HistoryUrl參數似乎已經存儲在其中的價值「http://www.yahoo.com」的問題。我到處尋找並搜索瞭如何將此值替換爲谷歌地址的網絡。我甚至通過XCode中的所有代碼消失了,找不到在哪裏historyurl聲明:

  1. 哪裏HistoryUrl聲明?
  2. 如何修改?

在此先感謝!

+3

不要使用'valueForKey:'來讀取值。使用'objectForKey:'。 – rmaddy

+0

感謝您的評論rmaddy。但我的問題是HistoryURL在哪裏聲明,我如何在XCode中編輯它的值?我無法在任何文件中找到它。 – user1761133

回答

1

@「HistoryUrl」是包含字符串HistoryURL的NSString *。那就是你如何用固定數據寫一個NSString *。

pref是表示用戶偏好的對象。 用戶的首選項包含多個鍵 - 值對。例如,可能有一個名爲「HistoryUrl」的鍵可能有一些價值。

valueForKey:方法讀取存儲在關鍵字「HistoryUrl」下的值並將其存儲到strUrl中。如果沒有鍵名爲「HistoryUrl」,那麼結果將爲零。(使用valueForKey:很奇怪,因爲它不是NSUserDefaults本身的方法;通常會使用objectForKey :)

下面的代碼檢查讀取的值是否有任何字符(長度大體上是數字字符);如果有任何字符,則newUrl被設置爲該值;如果沒有字符,則將newUrl設置爲NSString *「http:/www.google.com」。

因此,某人在某個時間已將名爲「HistoryUrl」的值存儲到應用程序的首選項文件中。您可以通過調用

刪除值PREF removeObjectForKey:@「HistoryUrl」]

或者,因爲你似乎並不想比「谷歌」其他任何東西,刪除所有代碼和只寫的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

HistoryURL是一個任意鍵,它在您的代碼中用於從NSUserDefaults檢索值。在您的代碼的某個階段,您需要使用setObject:forKey:來更新存儲在NSUesrDefaults中的值。您還需要撥打synchronize以保存設置後的新值。