2013-03-31 8 views
5

Próbuję przeglądać znajomych użytkownika Twittera za pomocą kursorów. Ponieważ dostajesz 20 jednocześnie i następny kursor, pomyślałem, że być może najlepszym rozwiązaniem jest rekurencja. Jednak uważam, że ponieważ używam bloków obsługi zakończenia, to nie działa poprawnie. Dostaję tylko dwie strony znajomych (40) i wraca.Mój kod do stronicowania przez znajomych na Twitterze za pomocą rekursji nie działa - 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]; 
     } 
    }]; 
} 

A metoda, która nazywa go:

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

UPDATE: Wydaje się, że ja dostaję te same dane next_cursor na każde żądanie. Czy ktoś tego doświadczył? Czy widzisz coś w tym kodzie, które by to spowodowało?

Odpowiedz

Powiązane problemy