0

所以,我正在尝试获取我标记的所有 Facebook 图片,以便我可以在 iPad 上看到它们,但我想制作这个功能,以便每次我需要获取 url 时都可以调用它。问题是,在我调用这个函数之后,数组是 nil,因为我得到的值在一个块内。如何创建一个数组来存储我获得的数据以备后用?

-(NSArray *)getFacebookTaggedPictures
{
__block NSArray *taggedPictures = [[NSArray alloc]init];

[FBRequestConnection startWithGraphPath:@"me/photos" completionHandler:^(FBRequestConnection *connection, id result, NSError *error)
 {
     if(!error)
     {
         taggedPictures = [(NSArray *)[result data]copy];
         //NSLog(@"the tagged pictures are: %@",result);
     }
 }];
return taggedPictures;
}
4

1 回答 1

0

正如您正确注意到的那样,您返回的数组是空的,因为您的方法在接收到来自 API 的响应并将其解析到块taggedPictures内部之前返回completionHandler

您必须将数组保存在该块内。我建议更改您的方法如下:

-(NSArray *)getFacebookTaggedPicturesWithCompletion:(void (^)(NSArray* photos))completion;

其中调用方法将传递适当的完成块来处理获得的图片。(即将它们保存到磁盘,显示它们,对它们进行一些处理等):

void (^loggerBlock)(NSArray* photos) = ^(NSArray *array) {
    NSLog(@"obtained photos: %@",[array description]);
    //save here instead of logging
};

[self getFacebookTaggedPicturesWithCompletion:loggerBlock];

希望这可以帮助。

于 2013-07-02T14:34:21.270 回答