2013-05-13 60 views
0

我在我的函數中有這樣一段代碼。我做了一個循環在按鈕內部創建一個異步圖像。 但是當我運行它時,我的按鈕不顯示異步圖像。請告訴我我的代碼有什麼問題。 當我打印NSLog的網址,它很好,並顯示所有的圖像網址。按鈕問題中的異步圖像

  // ADD BUTTON 
      UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom]; 
      [btn setFrame:CGRectMake(topLeft.x,topLeft.y,width,height)]; 

      //Asyncronous Image 
      NSMutableString *imageUrl; 

      if ([[[type objectAtIndex:btnNumber] objectForKey:@"LAST_CONTENT_IMAGE"] isEqualToString:@""] || [[type objectAtIndex:btnNumber] objectForKey:@"LAST_CONTENT_IMAGE"] == nil) { 
       imageUrl = [NSMutableString stringWithFormat:@"bank_images/actual/"]; 
      }else{ 
       imageUrl = [[type objectAtIndex:btnNumber] objectForKey:@"LAST_CONTENT_IMAGE"]; 
      } 

      NSURL *url1 = [NSURL URLWithString:imageUrl]; 
      NSLog(@"URL GBR : %@", url1); 

      NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
      NSString *documentsDirectory = [paths objectAtIndex:0]; 
      NSString *stringSub = [imageUrl substringWithRange:NSMakeRange (imageUrl.length-9, 9)]; 
      NSString *path = [NSString stringWithFormat:@"%@/%u_%@", documentsDirectory,[GlobalVariable sharedInstance].indexCategoryGlobal,stringSub]; 

      if ([[NSFileManager defaultManager] fileExistsAtPath:path]) 
      { 
       NSData *img = [NSData dataWithContentsOfFile:path]; 
       UIImage *imageExist = [UIImage imageWithData:img]; 
       image = imageExist; 
       [btn setImage:image forState:UIControlStateNormal]; 
      }else{ 
       dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0); 
       dispatch_async(queue, ^{ 
        //This is what you will load lazily 
        NSData *data1 = [NSData dataWithContentsOfURL:url1]; 

        dispatch_sync(dispatch_get_main_queue(), ^{ 
         image = [UIImage imageWithData:data1]; 
         [btn setImage:image forState:UIControlStateNormal]; 

         if ([stringSub isEqualToString:@"s/actual/"]){ 
          image = [UIImage imageNamed:@"default_thumb.png"]; 
          [btn setImage:image forState:UIControlStateNormal]; 
         } 

         [[NSFileManager defaultManager] createFileAtPath:path 
                   contents:data 
                   attributes:nil]; 
        }); 
       }); 
      } 
      [btn setTag:btnNumber]; 
+1

你知道SDWebImage的,如果不通過這個鏈接:https://github.com/rs/SDWebImage – 2013-05-13 04:02:30

+0

這樣就可以直接使用[BTN setImageWithUrl:]。 – 2013-05-13 04:04:26

+0

謝謝@venkat,但我更喜歡現在使用此代碼。 你能不能幫助我,而不使用該庫? :) – Template09 2013-05-13 04:18:05

回答

0

看起來你一個錯誤的方式 蘋果文檔中創建NSURL對象說我們

URLWithString: 創建並返回與提供的字符串初始化的NSURL對象。

  • (ID)URLWithString:(的NSString *)URLString 參數 URLString 與初始化NSURL對象的字符串。必須是符合RFC 2396的URL這種方法根據的RFC 1738和1808解析URLString(要創建文件系統路徑NSURL對象,請使用fileURLWithPath:isDirectory:不是。)

所以,看起來像你應該使用 fileURLWithPath:isDirectory:

+0

你能解釋一下更具體的@vlad嗎? – Template09 2013-05-13 06:08:39

+0

你有這樣的代碼imageUrl = [NSMutableString stringWithFormat:@「bank_images/actual /」]; NSURL * url1 = [NSURL URLWithString:imageUrl];這裏@「bank_images/actual /」看起來像文件系統中的路徑。如果是這樣,你應該使用類似NSURL * url1 = [NSURL fileURLWithPath:imageURL];的方法創建NSURL對象; – 2013-05-13 06:11:28

+0

另外,如果你提供了什麼信息將會很有幫助[[objectAtIndex:btnNumber] objectForKey:@「LAST_CONTENT_IMAGE」]? – 2013-05-13 06:18:57