gpt4 book ai didi

objective-c - 合并 NSDictionary

转载 作者:行者123 更新时间:2023-11-29 04:18:09 25 4
gpt4 key购买 nike

目标:将所有返回的带有一个公共(public)键值“延迟”的 NSDictionaries 合并到一个 NSMutablearry 中,我可以用它来比较结果(真或假),以在 map 上放置绿色或红色图钉。
此代码返回 JSON 格式的机场数据,我将其转换为所请求机场的字典。有很多键,但在这部分代码中,我只对其中一个感兴趣 - “延迟”,我想将其合并到一个 NSMutablearry 中。
因为我一次只能请求一个机场,所以它会单独返回每个请求的机场,我得到 9 组数据。我想要的是 9 个不同机场的 9 个延迟键全部位于一个数组中。

`- (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`

最佳答案

这是您的问题:每次创建新字典时都会实例化 airportDelays 数组,因此,您只需在销毁 airportDelay 数组并创建新字典之前添加一个字典。见下文

self.airportDelays = [[NSMutableArray alloc] initWithCapacity:9];


[self parseDelay:dictionary];

应该是

if (!self.airportDelays) {
self.airportDelays = [[NSMutableArray alloc] initWithCapacity:9];
}
[self parseDelay:dictionary];

我也厌倦了你使用 for 循环来进行网络操作。您可能应该使用不同的排队机制,程序在向 Web 服务请求下一个字典之前等待第一个字典的响应。不过,在不同的时间这可能是不同的教训。

祝你好运

关于objective-c - 合并 NSDictionary,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13380052/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com