2010-01-02 44 views
0

我使用下面的代碼來設置在從服務器加載表的圖像,但我有一個拋出的異常(不是每個時間)這是關係到繪圖錯誤在我從服務器獲取的tableview中設置圖像?

- (void) getTheThumnbails:(NSIndexPath *)indexPath{ 
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 

    GDataEntryYouTubeVideo *entry = [feedArray objectAtIndex:indexPath.row]; 

    NSURL *url = [[NSURL alloc] initWithString:[[[[entry mediaGroup] mediaThumbnails] objectAtIndex:0] URLString]]; 
    NSData *imgData = [[NSData alloc] initWithContentsOfURL:url]; 
    UIImage *img = [[UIImage alloc] initWithData:imgData]; 

    CGRect newFrame = CGRectMake(0.0, 0.0, 62.0, 62.0); 

    UIGraphicsBeginImageContext(newFrame.size); 

    [img drawInRect:newFrame]; 

    UIImage *resizedImg = UIGraphicsGetImageFromCurrentImageContext(); 

    UIGraphicsEndImageContext(); 

    [imgDict setObject:resizedImg forKey:[NSString stringWithFormat:@"%i",indexPath.row]]; 

    [[[myTableView cellForRowAtIndexPath:indexPath] imageView] setImage:resizedImg]; 
    [pool release]; 
} 

請幫我人,整理我正在做的錯誤。

回答

0

試圖在線程中繪製圖像不是一個好習慣,請不要在線程中執行任何UI操作,它們需要在主線程中完成。

好,我做了上述類似

- (void) getTheThumnbails:(NSIndexPath *)indexPath{ 
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 

    GDataEntryYouTubeVideo *entry = [feedArray objectAtIndex:indexPath.row]; 

    NSURL *url = [[NSURL alloc] initWithString:[[[[entry mediaGroup] mediaThumbnails] objectAtIndex:0] URLString]]; 
    NSData *imgData = [[NSData alloc] initWithContentsOfURL:url]; 
    UIImage *img = [[UIImage alloc] initWithData:imgData]; 
    [imgDict setObject:img forKey:[NSString stringWithFormat:@"%i",indexPath.row]]; 
    [img release]; 
    [self performSelectorOnMainThread:@selector(setImageInTable:) withObject:indexPath waitUntilDone:NO]; 
    [pool release]; 
} 

- (void)setImageInTable:(NSIndexPath *)indexPath{ 

    UIImage *img = (UIImage *)[imgDict valueForKey:[NSString stringWithFormat:@"%i",indexPath.row]]; 

    CGRect newFrame = CGRectMake(0.0, 0.0, 62.0, 62.0); 

    UIGraphicsBeginImageContext(newFrame.size); 

    [img drawInRect:newFrame]; 

    UIImage *resizedImg = UIGraphicsGetImageFromCurrentImageContext(); 

    UIGraphicsEndImageContext(); 

    [imgDict removeObjectForKey:[NSString stringWithFormat:@"%i",indexPath.row]]; 

    [imgDict setObject:resizedImg forKey:[NSString stringWithFormat:@"%i",indexPath.row]]; 

    [[[myTableView cellForRowAtIndexPath:indexPath] imageView] setImage:resizedImg]; 

} 

希望這有助於。

感謝,

Madhup

相關問題