我是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的地方:
提前致谢!
答案 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
调用并非绝对必要,因为系统通常会最终编写您的更改。但是很多人喜欢在他们对默认系统进行更改时调用它。