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