0

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

-(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

正如你已经正确注意到,您返回是空的,因为你的方法从API响应已收到,并解析为taggedPicturescompletionHandler块内之前返回数组。

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

-(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]; 

希望这有助于。

+0

我该如何在那里保存?我不知道如何编写代码来实现它,这些块越来越好 –

+0

您可以使用您在其他地方使用的相同代码。如果您使用CoreData进行持久性,请注意:“NSManagedObjectContext”不是线程安全的。 –

+0

我没有使用核心数据,我不需要,只是想与我从这个方法得到的数据有一个数组。 –