目標:1つの共通キー値「delay」で返されたすべてのNSDictionaryを1つのNSMutablearryに結合します。これを使用して、結果(trueまたはfalse)を比較し、緑または赤のピンをマップに配置できます。
このコードは、要求された空港の辞書に変換するJSONの空港データを返します。キーはいくつかありますが、コードのこの部分では、1つのNSMutablearryに結合したい「遅延」の1つだけに関心があります。
一度にリクエストできる空港は1つだけなので、リクエストされた各空港が個別に返され、9セットのデータが取得されます。私が欲しいのは、9つの異なる空港用の9つの遅延キーをすべて1つの配列にまとめたものです。
`- (void)configureData
{
self.airportCodes = [[NSArray alloc] initWithObjects:
@"ATL",
@"BOS",
@"BWI",
@"CLT",
@"CVG",
@"DEN",
@"EWR",
@"ORD",
@"SFO",
nil];
NSUInteger airportCount = self.airportCodes.count;
for(int i=0; i < airportCount;i++){
NSURL *url = [self urlWithSearchText:[self.airportCodes objectAtIndex: i]];
NSString *jsonString = [self performAirportRequestWithURL:url];
if (jsonString == nil) {
[self showNetworkError];
}
NSDictionary *dictionary = [self parseJSON:jsonString];
if (dictionary == nil) {
[self showNetworkError];
}
self.airportDelays = [[NSMutableArray alloc] initWithCapacity:9];
[self parseDelay:dictionary];
//NSLog(@"AP Delays %@",self.airportDelays);
}
return;
}
- (void)parseDelay:(NSDictionary *)dictionary
{
//self.delay = [dictionary objectForKey:@"delay"];
[self.airportDelays addObject:dictionary];
NSLog(@"AP Delays %@",self.airportDelays);
return;
}
- (NSURL *)urlWithSearchText:(NSString *)searchText
{
NSString *escapedSearchText =
[searchText stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSString *urlString =
[NSString stringWithFormat:
@"http://services.faa.gov/airport/status/%@? format=application/json", escapedSearchText];
NSURL *url = [NSURL URLWithString:urlString];
return url;
}
- (NSString *)performAirportRequestWithURL:(NSURL *)url
{
NSError *error;
NSString *resultString = [NSString stringWithContentsOfURL:
url encoding:NSUTF8StringEncoding error:&error];
if (resultString == nil) {
NSLog(@"Download Error: %@", error);
return nil;
}
return resultString;
}
- (void)showNetworkError
{
UIAlertView *alertView = [[UIAlertView alloc]
initWithTitle:@"Whoops..."
message:@"There was an error reading
from the FAA Server. Please try again."
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alertView show];
}
- (NSDictionary *)parseJSON:(NSString *)jsonString
{
NSData *data = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
NSError *error;
id resultObject = [NSJSONSerialization JSONObjectWithData:data options:
kNilOptions error:&error];
if (resultObject == nil) {
NSLog(@"JSON Error: %@", error);
return nil;
if (![resultObject isKindOfClass:[NSDictionary class]]) {
NSLog(@"JSON Error: Expected dictionary");
return nil;
}
}
return resultObject;
}
@end`