- (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之前返回的。
答案 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