我正在调用一个方法,该方法使用parse连接到数据库以获取图像。
一切顺利, in 方法,但不知何故,当我返回值时,它总是返回一个空(nil)UIImage
。
这是我的方法:
- (UIImage *)getImage:(NSString *)objectId
{
__block UIImage *image = nil;
if(![objectId isEqual:@""]){
PFQuery *query = [PFQuery queryWithClassName:@"UserPhoto"];
[query whereKey:@"objectId" equalTo:objectId];
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
if(!error){
for (PFObject *object in objects) {
PFFile *imageFile = [object objectForKey:@"imageFile"];
[imageFile getDataInBackgroundWithBlock:^(NSData *imageData, NSError *error) {
if (!error) {
image = [UIImage imageWithData:imageData];
NSLog(@"self.image: %@",self.image); //logs UIImage
}
else {
NSLog(@"Error: %@ %@", error, [error userInfo]);
}
}];
}
} else{
NSLog(@"Error: %@ %@", error, [error userInfo]);
}
}];
}
return image; //returns nil
}
为什么会这样?
我试图把图像放到一个全局变量中,也没用,把它存放在数组中,也没用。我很好奇看到解决方案。
答案 0 :(得分:0)
假设您希望使用返回的图像更新代码中的某个ImageView。
[imageFile getDataInBackgroundWithBlock:^(NSData *imageData, NSError *error) {
if (!error) {
image = [UIImage imageWithData:imageData];
NSLog(@"self.image: %@",self.image); //logs UIImage
[self updateImageViewWithImage:image];
}
else {
NSLog(@"Error: %@ %@", error, [error userInfo]);
}
}];
*提示:UI更改仅适用于主线程。