NSUserDefaults中的Valueforkey

时间:2014-02-14 17:46:25

标签: ios objective-c nsuserdefaults

我是IOS编程的新手,我正在尝试修改开发人员为我编写的一些代码。我在以下代码中遇到问题

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

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

}
else
{
    newUrl=@"http://www.google.com";
}

HistoryUrl参数似乎存储了值“http://www.yahoo.com”。我到处寻找并在网上搜索如何将此值替换为谷歌的地址。我甚至已经浏览了XCode中的所有代码,无法找到声明historyurl的地方:

  1. HistoryUrl在哪里宣布?
  2. 如何修改?
  3. 提前致谢!

3 个答案:

答案 0 :(得分:1)

HistoryURL 是一个任意键,它在您的代码中用于从NSUserDefaults检索值。在代码的某个阶段,您需要使用setObject:forKey:来更新NSUesrDefaults中存储的值。您还需要在设置完成后调用synchronize来保存新值。

答案 1 :(得分: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”]

或者,既然您似乎不想要“google”以外的任何内容,请删除所有代码,只需编写NSString * newUrl = @“http://www.google.com”,如果这是您想要的。

答案 2 :(得分:0)

  

HistoryUrl在哪里宣布?

不是。 @"HistoryUrl"只是一个字符串。阅读NSUserDefaults以了解它是如何工作的,但简而言之,默认系统就像一个关联数组(也称为字典或地图),您可以在其中键入/值对。在这种情况下,@"HistoryUrl"是关键,@"http://www.yahoo.com"是值。您可以构成存储值所需的任何键。

  

如何修改?

是否要修改密钥或与密钥关联的值?如果是前者,只需组成一个不同的密钥并使用它。如果是后者,请使用NSUserDefaults的方法设置不同的值:

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

注意:-synchronize调用并非绝对必要,因为系统通常会最终编写您的更改。但是很多人喜欢在他们对默认系统进行更改时调用它。