2013-05-13 43 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