所有请求完成后执行代码(Facebook SDK)

月神

除了委派以外,是否可以从异步完成块返回?最好通过调用一个块来传递值吗?

- (NSMutableArray *)facebookGalleryImages
{
    // Create array which will hold dicts for each image containing both thumbnail and original image URLs
    NSMutableArray *allFBImages = [[NSMutableArray alloc] init];
    // Begin Facebook API Calls
    [FBRequestConnection startWithGraphPath:@"me/albums" completionHandler:^(FBRequestConnection* connection, id result, NSError* error) {
        if (!error) {
            // Get data of all albums
            NSArray *feed =[result objectForKey:@"data"];
            for (NSDictionary *dict in feed) {
                // Get album ID of each album
                NSString *albumID = [dict objectForKey:@"id"];
                // New API call to get the image data for a specific album ID
                [FBRequestConnection startWithGraphPath:[NSString stringWithFormat:@"%@/photos", albumID] completionHandler:^(FBRequestConnection *connection, id result, NSError *error) {
                    if (!error){
                        // Get data of all images in album
                        NSArray *imageFeed = [result objectForKey:@"data"];
                        // For each image data object, extract source image URL and thumbnail URL, then add these to a dictionary
                        for (NSDictionary *dict in imageFeed){
                            NSString *sourceURL = [dict objectForKey:@"source"];
                            NSString *thumbnailURL = [dict objectForKey:@"picture"];
                            NSDictionary *imageDict = @{ @"source" : sourceURL, @"thumbnail" : thumbnailURL};
                            //Add the dictionary holding an images URLs to an array which will be passed to our gallery
                            [allFBImages addObject:imageDict];
                        }
                    }
                }];
            }
        }
    }];
}
卡巴尔加

您的返回码无效,因为方法是异步的。最好的办法是将方法扩展为在完成时返回,因此您的方法将如下所示:

- (void) facebookGalleryImages:(void (^)(NSMutableArray *imagesArray, NSError *error))completion
{
     NSMutableArray *allFBImages = [[NSMutableArray alloc] init];
     // Begin Facebook API Calls
    [FBRequestConnection startWithGraphPath:@"me/albums" completionHandler:^(FBRequestConnection* connection, id result, NSError* error) {
         if (!error) {
            // Get data of all albums
            NSArray *feed =[result objectForKey:@"data"];
            for (NSDictionary *dict in feed) {
                // Get album ID of each album
                NSString *albumID = [dict objectForKey:@"id"];
                // New API call to get the image data for a specific album ID
                [FBRequestConnection startWithGraphPath:[NSString stringWithFormat:@"%@/photos", albumID] completionHandler:^(FBRequestConnection *connection, id result, NSError *error) {
                    if (!error){
                        // Get data of all images in album
                        NSArray *imageFeed = [result objectForKey:@"data"];
                        // For each image data object, extract source image URL and thumbnail URL, then add these to a dictionary
                        for (NSDictionary *dict in imageFeed){
                            NSString *sourceURL = [dict objectForKey:@"source"];
                            NSString *thumbnailURL = [dict objectForKey:@"picture"];
                            NSDictionary *imageDict = @{ @"source" : sourceURL, @"thumbnail" : thumbnailURL};
                            //Add the dictionary holding an images URLs to an array which will be passed to our gallery
                            [allFBImages addObject:imageDict];
                        }
                    }
                }];
            }
            completion(allFBImages, nil);
        }else {
           completion(nil, error);
        }
    }];
}

最后,您将使用如下方法:

[self facebookGalleryImages:^(NSMutableArray *imagesArray, NSError *error) {
     if ([imagesArray count] > 0 ){
         // do something with the array
     }else {
         // do something with error
     }     
};

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在所有ajax请求完成后执行代码

来自分类Dev

如何仅在所有请求完成后调用函数?

来自分类Dev

Facebook SDK的最低SDK

来自分类Dev

完成所有请求人员后执行AJAX done()

来自分类Dev

使用第一个请求设置其他请求,在RxSwift中链接请求,然后在完成后返回所有请求

来自分类Dev

在循环中的所有AJAX请求完成后,如何执行回调?

来自分类Dev

Jmeter postProcessor 在所有 http 请求完成后只执行一次

来自分类Dev

当所有ajax请求都完成后,则

来自分类Dev

jQuery-所有ajax完成后执行操作

来自分类Dev

iOS Facebook SDK批处理请求,单个完成块

来自分类Dev

iOS Facebook SDK批处理请求,单个完成块

来自分类Dev

Firefox SDK多次执行请求

来自分类Dev

登录后Facebook SDK崩溃

来自分类Dev

$ digest完成后如何执行代码?

来自分类Dev

任务完成后,JavaFX执行代码

来自分类Dev

Facebook SDK卡在AsyncTask上,阻止单个执行程序上的所有线程

来自分类Dev

Facebook SDK卡在AsyncTask上,阻止单个执行程序上的所有线程

来自分类Dev

使用iOS SDK上传多个文件,完成后在本地删除它们

来自分类Dev

NullPointerException by ActivityResult,Facebook SDK

来自分类Dev

Facebook SDK 4.0 ShareDialog

来自分类Dev

Facebook SDK:发布分数

来自分类Dev

Facebook Audience SDK

来自分类Dev

注销Facebook Android SDK

来自分类Dev

删除Facebook SDK出错

来自分类Dev

iOS 8 Facebook SDK

来自分类Dev

Android Facebook SDK登录

来自分类Dev

删除Facebook SDK出错

来自分类Dev

PHP Facebook SDK

来自分类Dev

Android + Facebook SDK