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つのNSLogは、parsedUSerTimelineの正確なカウント値と配列の内容を示しています。しかし、私の2つのNSLogs OUTSIDE THE REQUESTメソッドは示しています

リクエスト外の -jsonArray 結果カウント: 0 -リクエスト外の jsonArray 値: (null)

また、fetchWebData メソッドを呼び出した後、viewDidLoad で parsedUserTimeLine の値を確認したところ、count = 0 と value = null が表示されました。

この人たちと一緒に私を助けてください。parsedUserTimeLine の値にグローバルにアクセスする必要があります。前もって感謝します。

4

1 に答える 1

2

Twitter フレームワークについてはわかりませんが、投稿したコードから、これが非同期で実行されることがわかります。NSLog は両方とも有効です。内側の 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 に答える