2013-03-31 6 views
5

Sto provando a sfogliare gli amici di Twitter di un utente usando i cursori. Dato che si ottiene 20 alla volta insieme a un cursore successivo, ho pensato che forse la ricorsione fosse il modo migliore per gestirlo. Tuttavia, credo perché sto usando blocchi di completamento, non funziona correttamente. Continuo a ricevere solo due pagine di amici (40) e ritorna.Il mio codice per sfogliare gli amici di Twitter usando la ricorsione non funziona - iOS

- (void)fetchTwitterFriendsForCrush:(Crush*)crush 
         fromCursor:(NSString*)cursor 
      usingManagedObjectContext:(NSManagedObjectContext*)moc 
         withSender:(id) sender 
      usingCompletionHandler:(void(^)())completionHandler 
{ 
    // twitter returns "0" when there are no more pages to receive 
    if (([cursor isEqualToString:@"0"]) || (cursor == nil)) { 
     completionHandler(); 
     return; 
    } 
    NSString *urlString = 
    [NSString stringWithFormat:@"https://api.twitter.com/1.1/friends/list.json?cursor%@skip_status=1", cursor]; 
    NSURL *requestURL = [NSURL URLWithString:urlString]; 
    SLRequest *request = [SLRequest requestForServiceType:SLServiceTypeTwitter 
              requestMethod:SLRequestMethodGET 
                 URL:requestURL 
               parameters:nil]; 
    request.account = self.twitterAccount; 
    [request performRequestWithHandler: 
    ^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) { 
     if (error) { 
      NSLog(@"Error getting twitter friends = %@", error); 
     } 
     if (responseData) { 
      NSError *jsonError; 
      NSString *nextCursor = nil; 
      NSMutableArray *friendsArray = [NSMutableArray arrayWithCapacity:100]; 
      NSDictionary *friendsDictionary = 
      [NSJSONSerialization JSONObjectWithData:responseData 
              options:0 
               error:&jsonError]; 
      if ([friendsDictionary valueForKey:@"next_cursor_str"]) { 
       nextCursor = [friendsDictionary valueForKey:@"next_cursor_str"]; 
      } 
      if ([friendsDictionary valueForKey:@"users"]) { 
       [friendsArray addObjectsFromArray:[friendsDictionary valueForKey:@"users"]]; 
      } 
      for (NSDictionary *singleFriend in friendsArray) { 
       NSString *twitterID = [singleFriend valueForKey:@"id_str"]; 
       NSString *name = [singleFriend valueForKey:@"name"]; 
       NSString *screenName = [singleFriend valueForKey:@"screen_name"]; 
       dispatch_queue_t mainQueue = dispatch_get_main_queue(); 

       dispatch_async(mainQueue, ^(void) { 
        // update model 
        TwitterFriend *newTwitterFriend = 
        [TwitterFriend twitterFriendWithTwitterID:twitterID 
                forCrush:crush 
            usingManagedObjectContext:moc]; 
        newTwitterFriend.name = name; 
        newTwitterFriend.screenName = screenName; 
       }); 
      } 
      [self fetchTwitterFriendsForCrush:crush 
            fromCursor:nextCursor 
        usingManagedObjectContext:moc 
            withSender:self 
         usingCompletionHandler:nil]; 
     } 
    }]; 
} 

E il metodo che lo chiama:

[self.twitterNetwork fetchTwitterFriendsForCrush:self.crush fromCursor:@"-1" usingManagedObjectContext:self.managedObjectContext withSender:self usingCompletionHandler:^{ 
    // 
    [self reloadData]; 
}]; 

UPDATE: Sembra che sto ricevendo gli stessi dati next_cursor su ogni richiesta. Qualcuno ha provato questo? O vedi qualcosa in questo codice che potrebbe causare quello?

risposta

Problemi correlati