2010-10-22 157 views
1

我在UITableView中實現異步圖像加載,如果我快速滾動行,我的應用程序因消息發送給殭屍而崩潰......我在這裏做什麼錯?殭屍殺死我的應用程序

//loading image from URL 
-(void)loadImageFromURL:(NSURL*)url { 
    if (connection!=nil) { [connection release]; } 
    //data is NSMutableData 
    if (data!=nil) { [data release]; } 

    NSURLRequest* request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0]; 
    connection = [[NSURLConnection alloc] initWithRequest:request delegate:self]; 
} 

//Append received data when it is received 
- (void)connection:(NSURLConnection *)theConnection didReceiveData:(NSData *)incrementalData { 
    if (data==nil) { data = [[NSMutableData alloc] init]; } 
     [data appendData:incrementalData]; //Message sent to zombie, app CRASHES HERE 
} 

//When finished 
- (void)connectionDidFinishLoading:(NSURLConnection*)theConnection { 
    //so self data now has the complete image 
    [connection release]; 
    connection=nil; 
    //Use received data to construct image 
    [data release]; 
    data=nil; 
} 
+0

由於您的應用程序在滾動時崩潰,因此查看'tableView:cellForRowAtIndexPath:' – bosmacs 2010-10-22 18:05:54

+0

中發生的代碼可能會有所幫助。「data」是NSData還是NSM​​utableData? – 2010-10-22 18:06:15

+0

@Evan它是'NSMutableData' – 2010-10-22 18:07:12

回答

5

這裏:

if (connection!=nil) { [connection release]; } 
if (data!=nil) { [data release]; } 

你發佈的數據。之後你會嘗試使用已發佈的數據,以便它崩潰。試試這個:

if (connection!=nil) { [connection release]; connection = nil; } 
if (data!=nil) { [data release]; data = nil; } 

這樣你的if語句會實際觸發。

+0

非常感謝,你使我的一天! – 2010-10-22 18:14:07