2012-09-20 2 views
0
- (ACAccount *)accountFacebook{ 
    if (_accountFacebook) { 
     return _accountFacebook; 
    } 
    if (!_accountStoreFacebook) { 
     _accountStoreFacebook = ACAccountStore.new;   
    } 
    ACAccountType *accountTypeFacebook = [self.accountStoreFacebook accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook]; 
    NSDictionary *options = @{ACFacebookAppIdKey : @"xxxxxxxxx", 
    ACFacebookAudienceKey : ACFacebookAudienceEveryone, 
    ACFacebookPermissionsKey : @[@"user_about_me", @"publish_actions"] 
    }; 
    __block ACAccount *accountFb; 
    [_accountStoreFacebook requestAccessToAccountsWithType:accountTypeFacebook options:options completion:^(BOOL granted, NSError *error) { 
     if (granted) { 
      NSLog(@"Facebook access granted"); 
      accountFb = _accountStoreFacebook.accounts.lastObject; 
     }else { 
      NSLog(@"Facebook access denied"); 
      accountFb = nil;} 
     if (error) { 
      NSLog(error.localizedDescription); 
     } 
    }]; 
    return accountFb; 
} 

를 반환합니다. 무엇을 변경해야합니까?방법은 블록이 완료 될 때까지 기다리지 않고, 블록 결과

답변

2

이것은 비동기 호출이므로 메서드가 끝난 후 블록이 완료됩니다. 완료 블록에서해야 할 일을하기 위해 앱을 재 설계해야합니다. appDelegate.accountFacebook으로 전화하고 그것이 0이 아닌 경우 무언가를 할 것으로 예상됩니다. 이 방법을 원하는대로 수행 할 수있는 완성 블록을 다음과 같이 수행하십시오.

typedef void(^HandlerType)(ACAccount* account); 

- (void)performForFacebookAccount: (HandlerType) handler{ 
    if (_accountFacebook) { 
     handler(_accountFacebook); 
     return; 
    } 

    if (!_accountStoreFacebook) { 
     _accountStoreFacebook = ACAccountStore.new; 
    } 

    ACAccountType *accountTypeFacebook = [self.accountStoreFacebook accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook]; 
    NSDictionary *options = @{ACFacebookAppIdKey : @"xxxxxxxxx", 
    ACFacebookAudienceKey : ACFacebookAudienceEveryone, 
    ACFacebookPermissionsKey : @[@"user_about_me", @"publish_actions"] 
    }; 

    [_accountStoreFacebook requestAccessToAccountsWithType:accountTypeFacebook options:options completion:^(BOOL granted, NSError *error) { 
     if (granted) { 
      NSLog(@"Facebook access granted"); 
      _accountFacebook = _accountStoreFacebook.accounts.lastObject; 

      handler(_accountFacebook); 

     }else { 
      NSLog(@"Facebook access denied"); 
      _accountFacebook = nil;} 
     if (error) { 
      NSLog(error.localizedDescription); 
     } 
    }]; 
} 
관련 문제