私は Objective-C を使い始めたばかりで、AFNetworking によってプルされたデータを抽出して、ラベル テキストなどとして使用することができないようです。Forecast.io に支えられた天気アプリと、Forecastr APIに使用しています。ラッパー。API が JSON を辞書に書き込んでいる場合、それが見つからないようです。
メイン ビュー コントローラで:
[forecastr getForecastForLocation:location time:nil exclusions:nil success:^(id JSON) {
NSLog(@"JSON response was: %@", JSON);
NSLog(@"Testing: %@", [JSON valueForKey:kFCSummary]);
} failure:^(NSError *error, id response) {
NSLog(@"Error while retrieving forecast: %@", [forecastr messageForError:error withResponse:response]);
}];
}
最初の NSLog 行は、シリアル化された完全な JSON オブジェクトとすべてを返しますが、2 行目は単に NULL を出力します。
Forecastr.m ファイルで:
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:urlString]];
if (self.callback) {
AFHTTPRequestOperation *httpOperation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
[httpOperation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
NSString *JSONP = [[NSString alloc] initWithData:responseObject encoding:NSASCIIStringEncoding];
if (self.cacheEnabled) [self cacheForecast:JSONP withURLString:cacheKey];
success(JSONP);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
failure(error, operation);
}];
[pendingRequests addObject:httpOperation];
[forecastrQueue addOperation:httpOperation];
} else {
AFJSONRequestOperation *jsonOperation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request
success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
if (self.cacheEnabled) [self cacheForecast:JSON withURLString:cacheKey];
success(JSON);
} failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON){
failure(error, JSON);
}];
[pendingRequests addObject:jsonOperation];
[forecastrQueue addOperation:jsonOperation];
}
これは、キャッシュされた予測を読み取り、キャッシュが古すぎる場合は新しい JSON ファイルを取得していることがわかります。しかし、JSON がどこに配置されているかわかりません。また、ほとんどのチュートリアルやリソースで使用されている辞書にもありません。
独自の辞書を作成するなど、すでにさまざまなことを試しましたが、そこに JSON オブジェクトが追加されません。また、返された JSON オブジェクトを辞書とキーと値のペアとして使用しようとしましたが、何も機能していないようです。私は何日も頭を壁にぶつけていましたが、Forecastr を使って問題を抱えている人はほとんどいません。