Ios UIImage数据方法返回nil
我正在调用一个方法,该方法使用parse连接到数据库以获取图像。 方法内部的一切都进行得很顺利,但在某种程度上,当我返回值时,它总是返回空(nil)Ios UIImage数据方法返回nil,ios,objective-c,uiimage,parse-platform,Ios,Objective C,Uiimage,Parse Platform,我正在调用一个方法,该方法使用parse连接到数据库以获取图像。 方法内部的一切都进行得很顺利,但在某种程度上,当我返回值时,它总是返回空(nil)UIImage 这是我的方法: - (UIImage *)getImage:(NSString *)objectId { __block UIImage *image = nil; if(![objectId isEqual:@""]){ PFQuery *query = [PFQuery queryWithClassName:@"
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
}
为什么会发生这种情况
我试图将图像放入一个全局变量,但也不起作用,将其存储在数组中,也不起作用。。我很想看看解决方案。假设您想用返回的图像更新代码中某个地方的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更改只在主线程上工作。
findObjectsInBackgroundWithBlock:
在后台运行,并在到达return
语句后很长时间内完成。啊,没错!太蠢了。。我可能应该使用某种异步方法来阻止返回,对吗?@bdv最好将getImage
方法更改为获取一个完成参数,该参数在映像准备好时运行。@ZevEisenberg这是一个好主意。然而,我在实现它时遇到了困难。。你有一个例子吗?你有什么问题吗?答案很好,思路很好,但是,图像需要在UI元素的委托方法中加载/创建,所以很遗憾,我不能使用这种方法。