ユーザーがそれらのアカウントへのアクセスを許可しない限り、アカウントにアクセスすることはできません。新しいプロジェクトのアプリデリゲートで次のことを試してみてください。そうすれば、アプリにTwitterアカウントへのアクセス許可が与えられていないことがわかります。もちろん、デバイスまたはシミュレーターに少なくとも1つのTwitterアカウントがあり、アカウントフレームワークがプロジェクトとアプリデリゲートにインポートされていることを確認してください。また、ユーザーがTwitterアカウントを1つだけ持っていると想定しています。ユーザーが複数のアカウントを持っている可能性がある場合にコーディングするのが最適です。
ACAccountStore *accountStore = [[ACAccountStore alloc] init];
// Create an account type that ensures Twitter accounts are retrieved.
ACAccountType *accountType = [accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierTwitter];
NSArray *accountsArray = [accountStore accountsWithAccountType:accountType];
for (ACAccount *account in accountsArray ) {
NSLog(@"Account name: %@", account.username);
}
NSLog(@"Accounts array: %d", accountsArray.count);
次に、ユーザーが権限を付与したときに結果を返すようにコードを変更します。
ACAccountStore *accountStore = [[ACAccountStore alloc] init];
// Create an account type that ensures Twitter accounts are retrieved.
ACAccountType *accountType = [accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierTwitter];
[accountStore requestAccessToAccountsWithType:accountType withCompletionHandler:^(BOOL granted, NSError *error) {
if(granted) {
NSArray *accountsArray = [accountStore accountsWithAccountType:accountType];
for (ACAccount *account in accountsArray ) {
NSLog(@"Account name: %@", account.username);
}
NSLog(@"Accounts array: %d", accountsArray.count);
}
}];
つまり、簡単な答えは、アップルがユーザーにユーザーアカウントへのアクセス許可を求める理由があるということだと思います。そのアクセスが許可されていない場合、データを取り戻すことはできません。