2

JSON データを返す単純なリクエストに RestKit を使用しています。viewDidLoad が最初に呼び出されたときにのみ機能し、2 回目にリクエストが実行されないこのコードを実装しました。どうして??

- (void)viewDidLoad
{
    [super viewDidLoad];

    [self planOtpTrip];
}

-(void) planOtpTrip{

        NSLog(@"[INFO] planoOtpTrip");

        client = [RKClient clientWithBaseURLString:@"http://myserver/opentripplanner-api-webapp/ws"];

        [client setValue:@"application/json" forHTTPHeaderField:@"Accept"]; 

        NSDictionary *queryParameters = [NSDictionary dictionaryWithObjectsAndKeys:@"45.028952,7.624598",@"fromPlace",@"45.06123,7.65981", @"toPlace",@"TRANSIT,WALK" ,@"mode", nil];



        // Imposto il nome della API da richiamare
        NSString *getResourcePath = RKPathAppendQueryParams(@"/plan", queryParameters);

        [client get:getResourcePath delegate:self];

    }

    - (void)request:(RKRequest*)request didLoadResponse:(RKResponse*)response {
        // where you handle response object

        NSLog(@"Risposta ricevuta: %@", response.URL);  

        NSLog(@"Response Body: %@", response.bodyAsString);

        id jsonParser = [[RKParserRegistry sharedRegistry] parserForMIMEType:RKMIMETypeJSON];
        NSError *error = nil;
        NSDictionary* parsedResponse = [jsonParser objectFromString:[response bodyAsString] error:&error];
        if (error == nil)
        {
            NSLog(@"GET returned with HTTP Code %d and parsedContent: %@", [response statusCode], parsedResponse);

        }
        else
        {
            NSLog(@"Error: %@", error);
        }


        return [self renderResponse:parsedResponse];


    }
4

1 に答える 1

0

私もこの問題を抱えていましたが、解決策を見つけました。次のように .h ファイルで RKClient を定義します。

@property (retain) RKClient *downloadClient;

次に、.m ファイルで次のように downloadClient を合成します。

@synthesize downloadClient;

そして、didLoadResponse メソッドで、完了したら downloadClient を解放します。次のようにします。

- (void)request:(RKRequest*)request didLoadResponse:(RKResponse*)response
{
//do something with your response

[downloadClient release];

}
于 2012-08-03T15:01:34.647 に答える