0

所以我正在尝试使用 ACAccountStore 登录/注册用户。这是使用模态呈现的视图控制器发生的。它工作得很好,但是,当我关闭视图控制器时,底层/呈现视图控制器仍然是一个黑色窗口。我假设会发生这种情况,因为我不等待完成块完成。

所以我的问题是:在调用之前如何等待完成块完成[self dismissViewControllerAnimated:YES completion:nil];

-(void)loginWithTwitter{

ACAccountStore *account = [[ACAccountStore alloc] init];
ACAccountType *accountType = [account accountTypeWithAccountTypeIdentifier:
                              ACAccountTypeIdentifierTwitter];

[account requestAccessToAccountsWithType:accountType options:nil
                              completion:^(BOOL granted, NSError *error)
 {
     if (granted) {
         //do something -> call function to handle the data and dismiss the modal controller.
     }
     else{
        //fail and put our error message.
     }  
 }];
}
4

1 回答 1

2

完成块是在主进程(在这种情况下访问帐户请求)完成执行的事情。所以你可以放进[self dismissViewControllerAnimated:YES completion:nil]去。

另一件事:self由于保留周期,在块中引用是不好的。您可以将代码修改为如下所示:

ACAccountStore *account = [[ACAccountStore alloc] init];
ACAccountType *accountType = [account accountTypeWithAccountTypeIdentifier:
        ACAccountTypeIdentifierTwitter];

__weak UIViewController *weakSelf = self;
[account requestAccessToAccountsWithType:accountType options:nil
                              completion:^(BOOL granted, NSError *error) {
    [weakSelf dismissViewControllerAnimated:YES completion:nil];

    if (granted) {
        //do something -> call function to handle the data and dismiss the modal controller.
    }
    else {
        //fail and put our error message.
    }

}];
于 2013-10-19T16:47:14.837 回答