所以,我正在尝试获取我标记的所有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;
}
答案 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];
希望这有帮助。