2013-03-31 41 views
2
- (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

您需要在哪裏返回該值?實現這一點的機制很少。 –

+0

我有一個函數'AAA'來調用'BBB'這個值。 –

回答

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