2013-03-31 5 views
5

मैं कर्सर का उपयोग कर उपयोगकर्ता के ट्विटर दोस्तों के माध्यम से पेज करने का प्रयास कर रहा हूं। चूंकि आप अगले कर्सर के साथ एक समय में 20 प्राप्त करते हैं, मैंने सोचा कि शायद इसे संभालने का सबसे अच्छा तरीका रिकर्सन था। हालांकि, मुझे विश्वास है क्योंकि मैं पूरा करने वाले हैंडलर ब्लॉक का उपयोग कर रहा हूं, यह सही तरीके से काम नहीं कर रहा है। मैं दोस्तों के केवल दो पेज (40) प्राप्त करता रहता हूं, और यह लौटता है।रिकर्सन का उपयोग कर ट्विटर दोस्तों के माध्यम से पेजिंग के लिए मेरा कोड काम नहीं कर रहा है - आईओएस

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

और विधि है कि यह कॉल:

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

अद्यतन: ऐसा लगता है कि मैं हर अनुरोध पर एक ही next_cursor डेटा प्राप्त कर रहा हूँ। क्या किसी ने इसका अनुभव किया है? या आप इस कोड में कुछ भी देखते हैं जो इसका कारण बनता है?

उत्तर

0

मैंने पाया कि एक और जटिल तरीका बेहतर है। आप https://api.twitter.com/1.1/friends/ids.json का उपयोग कर सकते हैं? अपने दोस्तों की सूची सूची प्राप्त करने के लिए। फिर 1.1/उपयोगकर्ता/lookup.json का उपयोग करके आप उपयोगकर्ताओं के लिए पूरी जानकारी प्राप्त कर सकते हैं। मैंने SLRequest (# iOS6) https://github.com/ArchieGoodwin/NWTwitterHelper

के साथ उपयोगकर्ता मित्रों को ड्रिल करने के लिए एक छोटा सा सहायक लिखा
संबंधित मुद्दे