0

を使用して気象データを取得しようとしていますAFJSONRequestOperation。問題は、クエリが実行されたときにオブジェクトを返すことができないことです。誰かがそれを行う方法を知っていますか?

私の現在の実装は

- (NSDictionary *)getCityWeatherData:(NSString*)city
{
    NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"http://free.worldweatheronline.com/feed/weather.ashx?key=xxxxxxxxxxxxx&num_of_days=3&format=json&q=%@", city]];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
        NSDictionary *data = [[JSON objectForKey:@"data"] objectForKey:@"weather"];
        return data;
    } failure:nil];
    [operation start];
}
4

1 に答える 1

0

ある意味で、これを行う方法があります。従来の return メソッドを使用する代わりに、呼び出し元にブロックをパラメーターとして渡させることができます。その後、成功ブロックと失敗AFJSONRequestOperationブロック内でこのブロックを呼び出すことができます。

これが私のコードのいくつかの例です:

- (void)postText:(NSString *)text
     forUserName:(NSString *)username
  withParameters:(NSDictionary *)parameters
       withBlock:(void(^)(NSDictionary *response, NSError *error))block
{
    NSError *keychainError = nil;
    NSString *token = [SSKeychain passwordForService:ACCOUNT_SERVICE account:username error:&keychainError];

    if (keychainError) {
        if (block) {
            block([NSDictionary dictionary], keychainError);
        }
    } else {
        NSDictionary *params = @{TEXT_KEY : text, USER_ACCESS_TOKEN: token};
        [[KSADNAPIClient sharedAPI] postPath:@"stream/0/posts"
                                  parameters:params
                                     success:^(AFHTTPRequestOperation *operation, id responseObject)
         {
             if (block) {
                 block(responseObject, nil);
             }
         }
                                     failure:^(AFHTTPRequestOperation *operation, NSError *error)
         {
             if (block) {
                 block([NSDictionary dictionary], error);
             }
         }];
    }
}

私はこれでそれを呼び出します:

 [[KSADNAPIClient sharedAPI] postText:postText
                          forUserName:username
                       withParameters:parameters
                            withBlock:^(NSDictionary *response, NSError *error)
 {
        // Check error and response
 }
于 2013-02-23T15:38:25.340 に答える