使用isEqualToString时访问不正确

时间:2012-07-12 19:06:51

标签: objective-c ios cocoa-touch sdk uiwebview

好的,这让我烦恼。我有以下代码:

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%的时间。我做错了什么?

1 个答案:

答案 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)真实区域。