2011-09-04 50 views
0

我在()數據被使用之前釋放與ASIHTTPRequest異步模式

NSURL *url = [NSURL URLWithString:@"http://somewebsite.com/data.txt"]; 
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; 
[request setDelegate:self]; 
[request startAsynchronous]; 

)從我的viewDidLoad中調用的函數這是我requestFinished(在那裏我做了一些文本替換和填充使用ASIHTTPRequest異步模式一個NSArray與我從網站收到的數據。這只是文本,每行一個數據項。 viedDidLoad()中的NSArray(和alloc/init)。

- (void)requestFinished:(ASIHTTPRequest *)request 
{ 
    NSString *sTemp = [request responseString]; 
    sTemp = [sTemp stringByReplacingOccurrencesOfString:@"\n" withString:@","];   
    arrayTidalData = [sTemp componentsSeparatedByString:@","]; 
    NSLog(@"Loaded %d items into the array",[arrayTidalData count]); 
    [tableTideTimes reloadData]; 
} 

NSLog報告127個數據項目。

現在,我使用NSArray數據填充UITableView。 但是,在的cellForRowAtIndexPath()當我嘗試做一個計數訪問的NSArray(arrayTidalData),例如,我得到如下:

TideTimes [14696:B303] * - [__ NSArrayM計數]:消息發送到釋放實例0x4e6c6a0

(我打開NSZOMBIEEnabled = YES得到這個數據)

看來NSArray的已釋放之前,我可以使用它。我也嘗試用requestFinish()中的數據填充NSString,但獲得了相同的結果。

我錯過了一些非常簡單的東西,還是我在做一些非常錯誤的事情?

(這是我第一次與ASIHTTPRequest)

回答

1

更換

arrayTidalData = [sTemp componentsSeparatedByString:@","]; 

arrayTidalData = [[sTemp componentsSeparatedByString:@","] retain]; 

這是因爲componentsSeparatedByString:回報autoreleased對象。因此,方法requestFinished:結束工作後爲released

並且不要忘記在工作結束時發佈(例如,dealloc)。

+0

謝謝,我沒有想過添加保留。 太棒了! – FiddleMeRagged

+0

不客氣。 – Nekto

相關問題