2011-06-09 139 views
0

我在後臺加載圖片。使用此代碼從背景加載圖片

-(void)backgroundImageLoading 
{ 
    if(isGroupOrFriend) 
    { 
     NSAutoreleasePool *pool=[[NSAutoreleasePool alloc] init]; 

     for(NSDictionary *d in m_kwikiArray) 
     { 
      NSMutableDictionary *dict=[NSMutableDictionary dictionary]; 
      if([d valueForKey:@"UserImage"]!=nil && ![[d valueForKey:@"UserImage"] isEqualToString:@""]) 
      { 
       UIImage *img=[UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:[d valueForKey:@"UserImage"]]]]; 
       if(img!=nil) 
        [dict setObject:img forKey:@"UserImage"]; 
      } 
      else 
       [dict setObject:@"No Image" forKey:@"UserImage"]; 
      //if([d valueForKey:@"imagePath"]!=nil && ![[d valueForKey:@"imagePath"] isEqualToString:@""]) 
      //   [dict setObject:[UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:[d valueForKey:@"imagePath"]]]] forKey:@"imagePath"]; 
      //  else 
      //   [dict setObject:@"NO Image" forKey:@"imagePath"]; 
      if([[d valueForKey:@"Transactions"] count]>0) 
      { 
       if([[[d valueForKey:@"Transactions"] objectAtIndex:0] valueForKey:@"UserThumbnail"]!= nil && ![[[[d valueForKey:@"Transactions"] objectAtIndex:0]valueForKey:@"UserThumbnail"] isEqualToString:@""]) 
       { 
        UIImage *img1=[UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:[[[d valueForKey:@"Transactions"] objectAtIndex:0] valueForKey:@"UserThumbnail"]]]]; 
        if(img1!=nil) 
         [dict setObject:img1 forKey:@"UserThumbnail1"]; 
       } 
       else 
        [dict setObject:@"NOImage" forKey:@"UserThumbnail1"]; 
      } 
      else 
       [dict setObject:@"NOImage" forKey:@"UserThumbnail1"]; 
      if([[d valueForKey:@"Transactions"] count]>1) 
      { 
       if([[[d valueForKey:@"Transactions"] objectAtIndex:1] valueForKey:@"UserThumbnail"]!=nil && ![[[[d valueForKey:@"Transactions"] objectAtIndex:1] valueForKey:@"UserThumbnail"] isEqualToString:@""]) 
       { 
        UIImage *img2=[UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:[[[d valueForKey:@"Transactions"] objectAtIndex:1] valueForKey:@"UserThumbnail"]]]]; 
        if(img2!=nil) 
         [dict setObject:img2 forKey:@"UserThumbnail2"]; 
       } 
       else 
        [dict setObject:@"NOImage" forKey:@"UserThumbnail2"]; 
      } 
      else 
       [dict setObject:@"NOImage" forKey:@"UserThumbnail2"]; 
      [imageForGruopAndFriendArray addObject:dict]; 

     } 
     //isReloadTable=YES; 
     [mTable reloadData]; 
     [pool release]; 
    } 
    else 
    { 
     NSAutoreleasePool *pool=[[NSAutoreleasePool alloc] init]; 

     for(NSDictionary *d in m_kwikiArray) 
     { 
      NSMutableDictionary *dict=[NSMutableDictionary dictionary]; 
      if([d valueForKey:@"Illustration"]!=nil && ![[d valueForKey:@"Illustration"] isEqualToString:@""]) 
      { 
       UIImage *img=[UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:[d valueForKey:@"Illustration"]]]]; 
       if(img!=nil) 
        [dict setObject:img forKey:@"Illustration"]; 
      } 

      else 
       [dict setObject:@"No Image" forKey:@"Illustration"]; 
      if([d valueForKey:@"imagePath"]!=nil && ![[d valueForKey:@"imagePath"] isEqualToString:@""]) 
      { 
       UIImage *img1=[UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:[d valueForKey:@"imagePath"]]]]; 
       if(img1!=nil) 
        [dict setObject:img1 forKey:@"imagePath"]; 
      } 
      else 
       [dict setObject:@"NO Image" forKey:@"imagePath"]; 
      if([[d valueForKey:@"Transactions"] count]>0) 
      { 
       if([[[d valueForKey:@"Transactions"] objectAtIndex:0] valueForKey:@"UserThumbnail"]!= nil && ![[[[d valueForKey:@"Transactions"] objectAtIndex:0]valueForKey:@"UserThumbnail"] isEqualToString:@""]) 
       { 

        UIImage *img2=[UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:[[[d valueForKey:@"Transactions"] objectAtIndex:0] valueForKey:@"UserThumbnail"]]]]; 
        if(img2!=nil) 
         [dict setObject:img2 forKey:@"UserThumbnail1"]; 
       } 
       else 
        [dict setObject:@"NOImage" forKey:@"UserThumbnail1"]; 
      } 
      else 
       [dict setObject:@"NOImage" forKey:@"UserThumbnail1"]; 
      if([[d valueForKey:@"Transactions"] count]>1) 
      { 
       if([[[d valueForKey:@"Transactions"] objectAtIndex:1] valueForKey:@"UserThumbnail"]!=nil && ![[[[d valueForKey:@"Transactions"] objectAtIndex:1] valueForKey:@"UserThumbnail"] isEqualToString:@""]) 
       { 
        UIImage *img3=[UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:[[[d valueForKey:@"Transactions"] objectAtIndex:1] valueForKey:@"UserThumbnail"]]]]; 
        if(img3!=nil) 
         [dict setObject:img3 forKey:@"UserThumbnail2"]; 
       } 
       else 
        [dict setObject:@"NOImage" forKey:@"UserThumbnail2"]; 
      } 
      else 
       [dict setObject:@"NOImage" forKey:@"UserThumbnail2"]; 
      [imageArray addObject:dict]; 

     } 
     //isReloadTable=YES; 
     [mTable reloadData]; 
     [pool release]; 
    } 
} 

這裏我使用reloadData每個圖片加載後的方法,但它不會加載圖片滾動表後顯示。

我想在加載後立即顯示這些圖像。

請幫幫我。提前Thanx。

+1

你們是不是比主線程之外的其他線程更新UI? – 2011-06-09 07:37:39

回答

1

在代碼中加入這一行insted的的[m_Table reloadData];我用這條線

[m_Table performSelectorOnMainThread:@selector(reloadData) withObject:self waitUntilDone:NO]; 
1

Ishu,

嘗試使用它代替的[mTable reloadData]

[mTable beginUpdates]; 
[mTable endUpdates]; 

順便說一句,不好意思說,但是這個代碼是完全不可讀。

+0

這不工作仍然需要滾動顯示在表中的圖像。 – Ishu 2011-06-09 08:01:34

+0

我完全同意Zapko - 你的代碼是不可讀的。 – 2011-06-09 08:09:49

1

Ishu,您的代碼的基本問題是,您無法通過UIImage imageWithData API在輔助線程中加載圖像。 UIKit APIS只能在主線程中使用。你可以做的是下載項目並將它們保存到輔助線程中的文件中,但是仍然需要在主線程中加載該圖像數據。如果您只是想下載並加載圖像數據,您甚至不需要輔助線程,因爲NSURLConnection類已經支持異步完成回調,下載會自動在後臺線程中完成。

+0

你說得對。我已經解決了我的問題,看到我的答案。 – Ishu 2011-06-10 04:51:46