簡體   English   中英

無法使用SDWebImage顯示圖像

[英]unable to display image using SDWebImage

iPhone新手在這里。 我有一張要顯示從rss feed獲取的圖像。 我目前正在使用下面的代碼,但是可以減慢視圖中元素的加載速度:

  for(int i=0; i<[bannerArray count]; i++){

       NSString *bannerImagestr = [[bannerArray objectAtIndex:i] BannerImage];
       bannerImagestr  = [ bannerImagestr  stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]];

      NSURL *banURL= [NSURL URLWithString:bannerImagestr];



       NSData *data = [NSData dataWithContentsOfURL:banURL];

       imgEventDetail = [[[UIImage alloc] initWithData:data] autorelease];


       [banEventDetailArray addObject:imgEventDetail];

 }NSLog(@"the  banEventDetailArray is %@",banEventDetailArray);

我嘗試使用SDWebImage API使其快速加載,但無法獲取圖像。 我一直在使用的代碼如下:

   for(int i=0; i<[bannerArray count]; i++){

       NSString *bannerImagestr = [[bannerArray objectAtIndex:i] BannerImage];
       bannerImagestr  = [ bannerImagestr  stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]];

      NSURL *banURL= [NSURL URLWithString:bannerImagestr];


       [banIconImage setImageWithURL:banURL placeholderImage:[UIImage imageNamed:@"placeholder.png"]];

      banImg=banIconImage.image;//<<<-------- updated here banImg is an instance of UIImage

       [banEventDetailArray addObject:banImg];

 }NSLog(@"the  banEventDetailArray is %@",banEventDetailArray);

我需要UIImage形式的banEventDetailArray ,因為我在下面的代碼中設置了此數組,該代碼以(UIImage *)作為其參數

 [eventsdetailroundedButtonType setBackgroundImage:[banEventDetailArray objectAtIndex:numTimerTicks] forState:UIControlStateNormal];

請幫助我找到我遺漏的地方以及可能出錯的地方。

提前致謝。

更新:我已經替換了第二個代碼塊中的一行。 即banImg = banIconImage.image; 在第11行。

您可以將圖片網址用作查找緩存圖片的鍵:

UIImage *myCachedImage = [[SDImageCache sharedImageCache] imageFromKey:[NSString \
stringWithFormat:@"%@",banURL]];

我猜問題出在這行:

   [banIconImage setImageWithURL:banURL placeholderImage:[UIImage imageNamed:@"placeholder.png"]];

   banImg=[[UIImage alloc]init];         // <-- here: empty image
   [banIconImage setImage:banImg];       // <-- here: overriding banURL image

由於您是:

  1. 首先,從網址獲取圖片;

  2. 用一個空的圖像覆蓋該圖像。

使用此代碼,而不是:

   [banIconImage setImageWithURL:banURL placeholderImage:[UIImage imageNamed:@"placeholder.png"]];
   [banEventDetailArray addObject:banIconImage];

即,您將檢索到的圖像添加到數組中,然后在以后使用。

您需要跟蹤UIImageView因為它是SDWebImage 確實,在獲取圖像時,該視圖處理了占位符的顯示。 當圖像在那里時,它將被替換。

僅在獲取實際圖像后才能獲取image屬性,否則只能獲取占位符。

為什么要兩次設置圖像? 沒道理

 [banIconImage setImageWithURL:banURL placeholderImage:[UIImage imageNamed:@"placeholder.png"]];

              banImg=[[UIImage alloc]init];
   [banIconImage setImage:banImg];

嘗試刪除第二個設置,應該是。

     [banIconImage setImageWithURL:banURL placeholderImage:[UIImage imageNamed:@"placeholder.png"]];

編輯:邏輯仍然沒有意義。 您可能正在嘗試將UIImageView的圖像添加為數組中的對象,這意味着您的代碼應該看起來像這樣。

NSString *bannerImagestr = [[bannerArray objectAtIndex:i] BannerImage];
bannerImagestr  = [ bannerImagestr  stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]];

NSURL *banURL= [NSURL URLWithString:bannerImagestr];
[banIconImage setImageWithURL:banURL placeholderImage:[UIImage imageNamed:@"placeholder.png"]];

[banEventDetailArray addObject:banIconImage.image];

在確定您不需要的代碼之前先嘗試一下代碼,顯然您並不完全知道自己想要什么。 如果這是您的問題的答案,請將其標記為解決方案。

您的數組不包含圖像對象。 而是保留指向UIImage對象的指針(引用)。 如果您查看自己的工作代碼,就會發現:

imgEventDetail = [[[UIImage alloc] initWithData:data] autorelease];

[banEventDetailArray addObject:imgEventDetail];

您使用數據創建並添加imgEventDetail UIImage對象的新實例,然后將其添加到數組中。 您需要對底部(不起作用)的代碼執行相同的操作。

在不起作用的代碼中嘗試以下操作:

 [banEventDetailArray addObject:banIconImage.image];  // array automatically retains.

所有這些都假定您使用SDWebImage API正確下載了圖像。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM