這個怎麼樣,假設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