我想在块执行后返回值

时间:2013-03-31 20:20:14

标签: iphone ios facebook-graph-api facebook-ios-sdk

- (NSString *) BBB {
    __block NSString *returnValue;

    NSDictionary *queryParameters = @{ @"q" : @"SELECT uid FROM user WHERE uid = me()"};
    [FBRequestConnection startWithGraphPath:@"fql" parameters:queryParameters HTTPMethod:@"GET" completionHandler:^(FBRequestConnection *connection, id result, NSError *error) {
        returnValue = result[@"data"][0][@"uid"];
        NSLog(@"inside block -> %@", returnValue);
    }];

    return returnValue;
}

我想返回正确的值,但FBRequestConnection是异步请求。 那个returnValue的值是(null),因为它是在执行FBRequestConnection的completionBlock之前返回的。

1 个答案:

答案 0 :(得分:2)

如果需要将该值返回到特定方法,则一个简单的解决方案可能是将依赖于该值的代码移动到其他方法。你也可以考虑设置一个等待指标。在这种情况下,用户将知道操作正在运行。

- (void)BBB {    

    __weak SelfType weakSelf = self; // to prevent possible memory leaks if you use ARC

    NSDictionary *queryParameters = @{ @"q" : @"SELECT uid FROM user WHERE uid = me()"};
    [FBRequestConnection startWithGraphPath:@"fql" parameters:queryParameters HTTPMethod:@"GET" completionHandler:^(FBRequestConnection *connection, id result, NSError *error) {
        returnValue = result[@"data"][0][@"uid"];
        NSLog(@"inside block -> %@", returnValue);

        __strong SelfType safeSelf = weakSelf;
        if(safeSelf) {
            // notify that the operation is finished
            [safeSelf DDDWithReturnValue:returnValue];
        }
    }];
}

我提供的代码在ARC下工作。如果您的代码未启用ARC,请使用

__block SelfType weakSelf = self; // for non-ARC code