我是在进行两次查询吗?

时间:2015-08-16 19:58:39

标签: objective-c parse-platform pfquery

由于PFFiles只能通过getDataInBackgroundWithBlock检索,因为在进行查询后它们不是对象(我认为..),我调用getDataInBackgroundWithBlock将PFFile转换为UIImage。

我通过调用findObjectInBackgroundWithBlock然后调用getDataBackgroundWithBlock进行两次查询吗?如果是这样,有没有办法只用一个查询完成这个?

PFQuery *query = [PFQuery queryWithClassName:@"photoObject"];

    [query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error){

        for (id object in objects) {


            PFFile *imageFile = object[@"photo"];
            [imageFile getDataInBackgroundWithBlock:^(NSData *imageData, NSError *error) {
                if (!error) {

                    [self.annotationArray addObject:object[@"location"]];
                    NSLog(@"Annotation's coordinate : %@", self.annotationArray);


                    self.callOutImage = [UIImage imageWithData:imageData];

                    self.geoPoint = object[@"location"];

                    CLLocationCoordinate2D locCoord = CLLocationCoordinate2DMake(self.geoPoint.latitude, self.geoPoint.longitude);
                    CustomPin *pin = [[CustomPin alloc] initWithTitle:[object objectId] location:locCoord image:self.callOutImage];
                    [self.mainMap addAnnotation:pin];

                }}];

        }

    }];

1 个答案:

答案 0 :(得分:2)

您正在制作两个异步网络请求,但只有一个请求 - findObjects - 是一个查询。 find返回指向文件的对象,为了获取文件的内容,需要第二个(非查询)请求。

有一种方法可以使用来自客户端的单个请求执行您正在执行的操作:云函数与发布的代码基本相同,然后返回检索到的数据。