2012-04-13 5 views

Antwort

3

Beachten Sie, dass auf dem Gerät möglicherweise mehrere Konten eingerichtet sind.

// 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]; 
     } 
    }]; 
    } 

Referenzen;

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

+0

Vielen Dank für ur Antwort ... aber ich brauche die Antwort als json von Profilinformationen des Benutzers ... –

+1

@RahulNair leider meine Kristallkugel mir nicht erzählen, dass – AnthonyBlake

6

Nun, lässt sagt du uns angezeigt werden soll Konten der Benutzer auf dem Gerät in einer Tabelle hat. Wahrscheinlich möchten Sie den Avatar in der Tabellenzelle anzeigen. In diesem Fall müssen Sie die API von Twitter abfragen.

Angenommen, Sie haben einen NSArray von ACAccount Objekte, können Sie ein Wörterbuch erstellen, um zusätzliche Profilinformationen für jedes Konto zu speichern. Ihre Tabellenansicht Controller tableView:cellForRowAtIndexPath: würde einige Codes wie dieser braucht:

// 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]; 
     }];    
    } 

All dies tut, ist Zugriff auf ein UIImage Objekt aus einem Wörterbuch des Wörterbücher, verkeilte durch die Kontokennung und dann ein statischen NSString Schlüssel. Wenn es kein Bildobjekt erhält, ruft es eine Instanzmethode auf und übergibt einen Completion-Handler-Block, der die Tabellenzeile erneut lädt. Die Instanzmethoden sieht ein bisschen wie folgt aus:

#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); 
    }]; 
} 

Also, stellen Sie sicher, dass Sie anmutig scheitern, aber, dass dann die Tabelle aktualisieren, da sie die Profilbilder herunterlädt. In Ihrem Completion-Handler können Sie diese in einen Image-Cache stellen oder sie auf andere Weise über die Lebensdauer der Klasse hinaus beibehalten.

Das gleiche Verfahren könnte verwendet werden, um auf andere Twitter-Benutzerinformationen zuzugreifen, see their docs.

2

Die oben genannten Methoden sind überkomplizierende Dinge. Verwenden Sie einfach:

ACAccount *twitterAccount = [accountsArray objectAtIndex:0]; 
NSLog(twitterAccount.accountDescription); 
+0

Vielen Dank für ur Antwort, Ich werde ur Code überprüfen ....: D –

+0

'accountDescription' zeigt nur Twitter-Nutzername auf iOS8 –

Verwandte Themen