मैं कर्सर का उपयोग कर उपयोगकर्ता के ट्विटर दोस्तों के माध्यम से पेज करने का प्रयास कर रहा हूं। चूंकि आप अगले कर्सर के साथ एक समय में 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 डेटा प्राप्त कर रहा हूँ। क्या किसी ने इसका अनुभव किया है? या आप इस कोड में कुछ भी देखते हैं जो इसका कारण बनता है?