使用isEqualToString时出现错误访问
问题描述:
好吧,这让我很烦恼。我有以下代码:使用isEqualToString时出现错误访问
weatherAddress = [NSString stringWithFormat:@"http://google.com"];
weatherUrl = [NSURL URLWithString:weatherAddress];
weatherContents = [NSString stringWithContentsOfURL:weatherUrl encoding:NSASCIIStringEncoding error:nil];
if ([viewer.request.URL.relativeString isEqualToString:weatherContents]) {
//do stuff
}
但是当它运行时,它有时会导致访问不良。当我说有时我通常是指50%的时间。我究竟做错了什么?
答
这个怎么样,假设weatherContents在类的定义:
weatherAddress = [NSString stringWithFormat:@"http://google.com"];
weatherUrl = [NSURL URLWithString:weatherAddress];
weatherContents = [NSString stringWithContentsOfURL:weatherUrl encoding:NSASCIIStringEncoding error:nil];
[NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(checkIfWeatherReceived) userInfo:nil repeats:NO];
然后创建一个名为checkIfWeatherReceived
像这样的方法:
-(void) checkIfWeatherReceived
{
if(weatherContents)
{
if ([viewer.request.URL.relativeString isEqualToString:weatherContents]) {
//do stuff
}
} else {
[NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(checkIfWeatherReceived) userInfo:nil repeats:NO];
}
}
我真的不喜欢使用的东西,将锁定如果你的连接断开了,那么你的界面就会变得更好,所以我不会只是“让它等待”或什么。如果天气数据已被抓取,这将每隔半秒检查一次。如果您希望更快地检查,请更改TimeInterval。如果你没有在数据中找到太多的延迟,你可能希望它真的非常快,比如.01或者其他。你也应该考虑如果连接丢失会发生什么情况,并且你永远不会获得数据,除非你已经解释了这一点。我没有测试过这个,但我认为它应该可行,假设你所有的作品都是类的一部分,而不是方法的本地作品。我也可能将checkIfWeatherReceived
中的实际工作分解为另一种方法,而不是将它放在if(weatherContents)
的真实区域中。
'viewer.request.URL.relativeString'的值是什么?它被释放了吗?调试器在异常停止时显示什么? – user1118321 2012-07-12 19:14:31
您发布的代码的第一行有错误。尝试通过'NSError * error'而不是'nil'并且尝试传递'NSError * error'而尝试复制/粘贴这个代码,或者你重新键入了它? – 2012-07-12 19:16:21
看看是否有错误返回 – 2012-07-12 19:29:08