我一直在使用AFHTTPRequestOperationManager调用我的服务返回一个图像,我的代码看起来像这样:
NSString *baseURLString = @"http://get_image/";
@try {
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager GET:baseURLString
parameters:nil
success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSString *imageStr = responseObject[0];
if([imageStr isKindOfClass:[NSNull class]]==NO)
{
NSData *imageData = [NSData dataWithBase64EncodedString:imageStr];
UIImage *image = [UIImage imageWithData:imageData];
self.myImage = (image==nil)? [UIImage imageNamed:@"noPhoto"]: image;
}
}
failure:^(AFHTTPRequestOperation *operation, NSError *error) {
self.myImage = [UIImage imageNamed:@"noPhoto"];
}];
}
@catch (NSException *exception) {
NSLog(@"exception %@", exception);
}
因为AFHTTPRequestOperationManager是异步的,我需要同步调用,如何完成此代码以生成我的图像:
NSString *baseURLString = @"http://get_image/";
NSURLResponse *response;
NSError *error;
NSURLRequest *urlRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:p_baseURLString] cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval:30];
// Make synchronous request
NSData *imageRequest = [NSURLConnection sendSynchronousRequest:urlRequest returningResponse:&response error:&error];
???
UIImage *image = [UIImage imageWithData:imageData];
self.displayedApartment.exteriorImage = (image==nil)? [UIImage imageNamed:@"noPhoto"]: image;
这是我试过的代替???全部导致image = nil
[[NSData alloc] initWithBase64EncodedData:imageRequest options:0];
将其转换为字符串并返回NSData
NSData NSString *imageStr = [NSString stringWithUTF8String:[imageRequest bytes]];
NSData *imageData = [NSData dataWithBase64EncodedString:imageStr];
答案 0 :(得分:0)
如果我正确阅读您的代码,我认为您的变量名称可能会造成一些麻烦。请尝试替换以下行:
NSData *imageRequest = [NSURLConnection sendSynchronousRequest:urlRequest returningResponse:&response error:&error];
带
NSData *imageData = [NSURLConnection sendSynchronousRequest:urlRequest returningResponse:&response error:&error];
然后看看UIImage *image = [UIImage imageWithData:imageData];
给你的是什么。除非请求中存在错误,否则我无法看到image
无法正确实例化的原因,除非它不代表图像对象。
答案 1 :(得分:0)
为什么不使用AFNetworking函数setImageWithURL显示图像,它会获取图像的URL并将UIImageView设置为该图像。如果你只需要显示它,它就是一种更简单的做事方式。
它看起来像这样:
[imageView setImageWithURL:[NSURL URLWithString:p_baseURLString]];
在标题文件中,您将有以下内容:
@property (weak, nonatomic) IBOutlet UIImageView *imageView;
它的速度也快得多。