获取Facebook图片供以后使用

时间:2013-07-02 13:21:17

标签: objective-c facebook facebook-graph-api objective-c-blocks

所以,我正在尝试获取我标记的所有Facebook图片,以便我可以在iPad上看到它们,但是我想创建这个功能,所以每次我需要获取网址时我都可以调用它。问题是,在我调用这个函数之后,数组是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;
}

1 个答案:

答案 0 :(得分: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];

希望这有帮助。