2

UIActionSheet をプルアップして、現在 Twitter の設定にサインインしているすべてのアカウントを表示しようとしています。タイプが Twitter に一致するすべてのアカウントの NSArray を取得し、次のコードを実行します。

UIActionSheet *chooseaccount = [[UIActionSheet alloc]initWithTitle:@"Choose Account" delegate:self cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles: nil];
for (int i = 0; i < [arrayOfAccounts count]--; i++) {
    [chooseaccount addButtonWithTitle:[arrayOfAccounts objectAtIndex:i]];
}
[chooseaccount addButtonWithTitle:@"Cancel"];
chooseaccount.cancelButtonIndex = arrayOfAccounts.count;
chooseaccount showInView:self.tabBarController.view];

ただし、「「読み取り専用」への割り当ては、目的の c メッセージの結果を返すことはできません」というエラーが表示されます

UIActionSheet に Twitter アカウントのすべての UserNames を表示するための提案はありますか?

更新:
いくつかの提案を行った後、コードを次のように変更しました。

-(void)twitteraccess {
    ACAccountStore *account = [[ACAccountStore alloc] init];
    ACAccountType *accountType = [account accountTypeWithAccountTypeIdentifier:
                                  ACAccountTypeIdentifierTwitter];

    [account requestAccessToAccountsWithType:accountType options:nil
                                  completion:^(BOOL granted, NSError *error)
    {
        if (granted == YES)
        {
            NSLog(@"Granted");

            NSArray *arrayOfAccounts = [account
                                        accountsWithAccountType:accountType];
            if ([arrayOfAccounts count] > 0)
            {
                NSLog(@"%i", [arrayOfAccounts count]);

                if ([arrayOfAccounts count] > 1) {
                    NSLog(@"Greaterthan1");
                    UIActionSheet *chooseaccount = [[UIActionSheet alloc]initWithTitle:@"Choose Account" delegate:self cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles: nil];
                    for (int i = 0; i < [arrayOfAccounts count]; i++) {

                        ACAccount * account = [arrayOfAccounts objectAtIndex:i];
                        [chooseaccount addButtonWithTitle:account.username];
                        NSLog(@"%@", account.username);
                    }

                    [chooseaccount addButtonWithTitle:@"Cancel"];
                    chooseaccount.cancelButtonIndex = arrayOfAccounts.count;

                    [chooseaccount showInView:self.tabBarController.view];
                }
                else {

                }

            }
        }
        else {
            if(error.code == 6){
                [self performSelectorOnMainThread:@selector(alertmessagetwitter)
                                       withObject:nil
                                    waitUntilDone:YES];                }
        }
    }];
}

アクション シートは表示されますが、表示されるまでに約 25 秒かかります。

4

1 に答える 1

2

を書くことはできません[arrayOfAccounts count]--。これは本質的に次のように展開されます。

[arrayOfAccounts count] = [arrayOfAccounts count] - 1; // assigning to readonly

代わりに、[arrayOfAccounts count] - 1(または高速列挙)を使用してください。

for (int i = 0; i < [arrayOfAccounts count]-1; i++) { //...


に関する編集InvalidArgumentException

オブジェクトarrayOfAccountsが含まれていて、含まれていないと仮定します。ACAccountNSString

for (int i = 0; i < [arrayOfAccounts count]-1; i++) { //...
    ACAccount * account = [arrayOfAccounts objectAtIndex:i];
    [chooseaccount addButtonWithTitle:[account userName]];
}
于 2013-01-11T18:34:06.553 に答える