我一直有这个问题,找不到任何东西。我正在使用 Social 框架来构建一个基本的 Twitter 应用程序(我自己的一个学习项目),并且直到最近帐户商店停止完成我的帐户访问请求时才遇到任何主要障碍。从我阅读和收集的所有示例中,当应用程序启动时,我请求访问帐户,然后一旦获得授权就可以从那里开始。
我必须获取帐户的代码是:
ACAccountType* accountType = [self.accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierTwitter];
NSLog(@"Making this call to getTwitterAccount");
[self.accountStore
requestAccessToAccountsWithType:accountType
options:nil
completion:^(BOOL granted, NSError* error) {
NSLog(@"Testing, this should show up");
if (granted) {
NSArray* accounts = [self.accountStore accountsWithAccountType:accountType];
[self getAccountFromArray:accounts];
}
else {
if (error.code == 6)
NSLog(@"No twitter account");
else
NSLog(@"Access denied");
}
}];
两个 NSLog 语句用于调试目的。我从中调用包含此代码的函数,viewDidLoad
该getAccountFromArray:(NSArray*)
函数只是确定用户是否希望将哪个帐户用于应用程序(如果需要,显示模式视图)。我的问题是永远不会调用完成块,除非我对模拟器中的帐户进行更改。更改帐户后,代码立即执行并显示模式(现在只显示一条消息),但对于任何其他执行,此块永远不会被触发,并且在控制台中看到的唯一打印是"Making this call to getTwitterAccount"
. 以前,这对于获取单个帐户效果很好,我能够让时间线获取工作和打印,但是由于某种原因它停止触发,我无法成功SLRequest
或基于它执行任何其他操作。
我在谷歌上搜索并发现了使用此功能的问题,但这些问题都与完成块永远不会触发有关。
编辑
好的,所以一个更新,一直在处理这个问题,出于某种原因,将调用检查帐户的函数转移到 viewsinitWithNibName:bundle:
方法似乎工作,它可靠地执行(尽管在应用程序加载后有一点点)。该函数被调用两次,但只执行一次完成,并且只有当我从init
- 也许是这个原因?