好的,这让我烦恼。我有以下代码:
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%的时间。我做错了什么?
答案 0 :(得分:1)
如果在类中定义了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)
真实区域。