0

我真的不知道如何处理 iOS5 Twitter API TWRequest performRequestWithHandler。我在我的 .h 文件中声明了 NSMutableArray *parsedTimeLine 的实例变量和 -(void) fetchWebData: (NSString *) screenName; 的方法签名。

上述方法实现在这里:

-(void) fetchWebData: (NSString *) screenName {

NSMutableDictionary *params = [[NSMutableDictionary alloc] init];
[params setObject:screenName forKey:@"screen_name"];
[params setObject:@"f" forKey:@"include_entities"];
[params setObject:@"f" forKey:@"include_rts"];
[params setObject:@"10" forKey:@"count"];
[params setObject:@"t" forKey:@"trim_user"];
[params setObject:@"f" forKey:@"contributor_details"];
[params setObject:@"t" forKey:@"exclude_replies"];

NSURL *url = [NSURL URLWithString:@"http://api.twitter.com/1/statuses/user_timeline.json"];

TWRequest *request = [[TWRequest alloc] initWithURL:url
                                         parameters:params
                                      requestMethod:TWRequestMethodGET];
[request performRequestWithHandler:
 ^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) {

     if (responseData) {
         NSError *jsonError;

         parsedUserTimeLine =[NSJSONSerialization JSONObjectWithData:responseData
                                                         options:NSJSONReadingMutableLeaves
                                                           error:&jsonError];

         NSLog(@"jsonArray result count inside request: %d",parsedUserTimeLine.count);
         NSLog(@"jsonArray values inside request: %@", parsedUserTimeLine);
     }
 }];   
NSLog(@"jsonArray result count outside request: %d",parsedUserTimeLine.count);
NSLog(@"jsonArray values outside request: %@", parsedUserTimeLine);    

}

这工作正常,但有一个奇怪的事情我真的想不通。我在请求方法中的 2 个 NSLogs 显示了 parsedUSerTimeline 的准确计数值和数组内容。但是我的 2 NSLogs OUTSIDE THE REQUEST 方法显示

-jsonArray 请求外的结果计数:0 -jsonArray 请求外的值:(null)

此外,在调用 fetchWebData 方法后,我在 viewDidLoad 中检查了 parsedUserTimeLine 的值,显示 count = 0 和 value = null。

请帮我解决这个问题。我需要全局访问 parsedUserTimeLine 的值。提前致谢。

4

1 回答 1

2

我不知道 Twitter 框架,但从你发布的代码中我可以告诉你这将执行异步。NSLogs 都是有效的。请求完成时调用内部 NSLogs,即使请求尚未启动,也会调用外部 NSLog。

如果请求已经完成,只需调用一个方法来通知其他人。

[request performRequestWithHandler:
 ^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) {

 if (responseData) {
     NSError *jsonError;

     NSDictionary *parsedUserTimeLine =[NSJSONSerialization JSONObjectWithData:responseData
                                                     options:NSJSONReadingMutableLeaves
                                                       error:&jsonError];

     NSLog(@"jsonArray result count inside request: %d",parsedUserTimeLine.count);
     NSLog(@"jsonArray values inside request: %@", parsedUserTimeLine);

     // The request will be perform on another thread, so call the method on the main
     // thread to avoid crossing operations
     [NSOperationQueue mainQueue] addOperationWithBlock:^{
         [self requestHasFinishedWithData:parsedUserTimeLine];
     }]

 }
}];
于 2012-08-18T11:31:38.933 回答