Iphone 按钮问题中的异步映像

Iphone 按钮问题中的异步映像,iphone,ios,Iphone,Ios,我的函数中有这样一段代码。我在按钮内循环创建一个异步映像。 但是当我运行它时,我的按钮不会显示异步映像。请告诉我我的代码有什么问题。 当我打印NSLog的网址,它的进展顺利,并显示所有的图像网址 // ADD BUTTON UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom]; [btn setFrame:CGRectMake(topLeft.x,topLe

我的函数中有这样一段代码。我在按钮内循环创建一个异步映像。 但是当我运行它时,我的按钮不会显示异步映像。请告诉我我的代码有什么问题。 当我打印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];

看起来您以错误的方式创建了NSURL对象 苹果的文档告诉我们

URLWithString: 创建并返回使用提供的字符串初始化的NSURL对象

  • (id)URLWithString:(NSString*)URLString 参数 URL字符串 用于初始化NSURL对象的字符串。必须是符合RFC 2396的URL。此方法根据RFCs 1738和1808解析URLString。(要为文件系统路径创建NSURL对象,请改用fileURLWithPath:isDirectory:)
看来你应该用
fileURLWithPath:isDirectory:

您是否知道SDWebImage,如果没有,请通过此链接:以便您可以直接使用[btn setImageWithUrl:];谢谢@venkat,但是我现在更喜欢使用这个代码。不用那个图书馆你能帮我吗?:)在添加视图的btn的位置??我在json中设置了一个空格,然后它显示default_thumb.png,因此我认为问题不在视图中。您能解释一下@vlad的更多细节吗?您有这样的代码imageUrl=[NSMutableString stringWithFormat:@“bank_images/actual/”;NSURL*url1=[NSURL URLWithString:imageUrl];这里的@“bank_images/actual/”看起来像文件系统中的路径。如果是这样,您应该使用类似NSURL*url1=[NSURL fileURLWithPath:imageURL]的方法创建NSURL对象;此外,如果您提供您将什么放入[[type objectAtIndex:btnNumber]objectForKey:@“LAST_CONTENT_IMAGE”]的信息,这将非常有用。此外,我不明白这里的数据变量是什么[[NSFileManager defaultManager]createFileAtPath:路径内容:数据属性:nil];你从哪里弄来的?它应该是数据1?