3

次のコードで Twitter に投稿できます。

TWTweetComposeViewController *tweeter = [[TWTweetComposeViewController alloc] init];
        [tweeter setInitialText:@"message"];
        [tweeter addImage:image];
        [self presentModalViewController:tweeter animated:YES];

iOS 5 の Twitter フレームワークでユーザーの Twitter プロフィール情報を取得するにはどうすればよいですか?

4

4 に答える 4

6

さて、ユーザーが自分のデバイスで持っているTwitterアカウントをテーブルに表示したいとしましょう。テーブルセルにアバターを表示することをお勧めします。その場合は、TwitterのAPIをクエリする必要があります。

NSArrayオブジェクトがたくさんあると仮定するとACAccount、各アカウントの追加のプロファイル情報を格納する辞書を作成できます。テーブルビューコントローラには、次のtableView:cellForRowAtIndexPath:ようなコードが必要です。

    // Assuming that you've dequeued/created a UITableViewCell...

    // Check to see if we have the profile image of this account
    UIImage *profileImage = nil;
    NSDictionary *info = [self.twitterProfileInfos objectForKey:account.identifier];
    if (info) profileImage = [info objectForKey:kTwitterProfileImageKey];

    if (profileImage) {
        // You'll probably want some neat code to round the corners of the UIImageView
        // for the top/bottom cells of a grouped style `UITableView`.
        cell.imageView.image = profileImage;

    } else {
        [self getTwitterProfileImageForAccount:account completion:^ {
            // Reload this row
            [self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
        }];            
    }

UIImageこれが行っているのは、アカウント識別子と静的キーでキー設定された辞書のディクショナリからオブジェクトにアクセスすることだけNSStringです。画像オブジェクトを取得しない場合は、インスタンスメソッドを呼び出し、完了ハンドラブロックを渡して、テーブルの行を再読み込みします。インスタンスメソッドは次のようになります。

#pragma mark - Twitter

- (void)getTwitterProfileImageForAccount:(ACAccount *)account completion:(void(^)(void))completion {

    // Create the URL
    NSURL *url = [NSURL URLWithString:@"users/profile_image" relativeToURL:kTwitterApiRootURL];

    // Create the parameters
    NSDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys:
                            account.username, @"screen_name", 
                            @"bigger", @"size",
                            nil];

    // Create a TWRequest to get the the user's profile image
    TWRequest *request = [[TWRequest alloc] initWithURL:url parameters:params requestMethod:TWRequestMethodGET];

    // Execute the request
    [request performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) {

        // Handle any errors properly, not like this!        
        if (!responseData && error) {
            abort();
        }

        // We should now have some image data
        UIImage *profileImg = [UIImage imageWithData:responseData];

        // Get or create an info dictionary for this account if one doesn't already exist
        NSMutableDictionary *info = [self.twitterProfileInfos objectForKey:account.identifier];
        if (!info) {
            info = [NSMutableDictionary dictionary];            
            [self.twitterProfileInfos setObject:info forKey:account.identifier];
        }

        // Set the image in the profile
        [info setObject:profileImg forKey:kTwitterProfileImageKey];

        // Execute our own completion handler
        if (completion) dispatch_async(dispatch_get_main_queue(), completion);
    }];
}

したがって、正常に失敗することを確認してください。ただし、プロファイルイメージをダウンロードすると、テーブルが更新されます。完了ハンドラーでは、これらを画像キャッシュに入れるか、クラスの存続期間を超えて永続化することができます。

同じ手順を使用して、他のTwitterユーザー情報にアクセスすることもできます。ドキュメントを参照してください

于 2012-05-08T23:05:56.180 に答える
3

デバイスに複数のアカウントがセットアップされている可能性があることに注意してください。

// Is Twitter is accessible is there at least one account
  // setup on the device
  if ([TWTweetComposeViewController canSendTweet]) 
  {
    // Create account store, followed by a twitter account identifer
    account = [[ACAccountStore alloc] init];
    ACAccountType *accountType = [account accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierTwitter];

    // Request access from the user to use their Twitter accounts.
    [account requestAccessToAccountsWithType:accountType withCompletionHandler:^(BOOL granted, NSError *error) 
    {
      // Did user allow us access?
      if (granted == YES)
      {
        // Populate array with all available Twitter accounts
        arrayOfAccounts = [account accountsWithAccountType:accountType];
        [arrayOfAccounts retain];

        // Populate the tableview
        if ([arrayOfAccounts count] > 0) 
          [self performSelectorOnMainThread:@selector(updateTableview) withObject:NULL waitUntilDone:NO];
      }
    }];
  }

参考文献;

http://iosdevelopertips.com/core-services/ios-5-twitter-framework-%E2%80%93-part-3.html

于 2012-04-13T08:53:21.043 に答える
2

上記の方法は、物事を過度に複雑にしています。単純に使用します:

ACAccount *twitterAccount = [accountsArray objectAtIndex:0];
NSLog(twitterAccount.accountDescription);
于 2012-10-20T04:42:06.937 に答える