Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios UIImage数据方法返回nil_Ios_Objective C_Uiimage_Parse Platform - Fatal编程技术网

Ios UIImage数据方法返回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:@"

我正在调用一个方法,该方法使用parse连接到数据库以获取图像。 方法内部的一切都进行得很顺利,但在某种程度上,当我返回值时,它总是返回空(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
}
为什么会发生这种情况


我试图将图像放入一个全局变量,但也不起作用,将其存储在数组中,也不起作用。。我很想看看解决方案。

假设您想用返回的图像更新代码中某个地方的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元素的委托方法中加载/创建,所以很遗憾,我不能使用这种方法。