2012-07-12 69 views
0

好吧,這讓我很煩惱。我有以下代碼:使用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%的時間。我究竟做錯了什麼?

+1

'viewer.request.URL.relativeString'的值是什麼?它被釋放了嗎?調試器在異常停止時顯示什麼? – user1118321 2012-07-12 19:14:31

+0

您發佈的代碼的第一行有錯誤。嘗試通過'NSError * error'而不是'nil'並且嘗試傳遞'NSError * error'而嘗試複製/粘貼這個代碼,或者你重新鍵入了它? – 2012-07-12 19:16:21

+0

看看是否有錯誤返回 – 2012-07-12 19:29:08

回答

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)的真實區域中。

相關問題