gpt4 book ai didi

ios - iOS-异步创建的数组仅返回一个对象

转载 作者:行者123 更新时间:2023-12-01 18:15:21 25 4
gpt4 key购买 nike

我真的很难弄清楚这一点。我正在将JSON异步解析为数组。在异步函数上运行NSLog可以打印出包含多个对象的数组,这正是我想要的。但是,当我在ViewController中返回的数组上运行NSLog时,它只会打印出数组的最后一个对象。然后,我对其进行计数,实际上,数组中只有1个对象。为什么只从具有多个对象的数组中返回只有一个对象的数组?下面是我的代码。感谢您的输入。

函数异步执行

- (NSArray *)locationsFromJSONFile:(NSURL *)url {
NSURLRequest *request = [NSURLRequest requestWithURL:url
cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData
timeoutInterval:30.0];


NSURLResponse *response;
NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil];

NSError *error;
NSMutableDictionary *allTeams = [NSJSONSerialization
JSONObjectWithData:data
options:NSJSONReadingMutableContainers
error:&error];

if( error )
{
NSLog(@"%@", [error localizedDescription]);
}
else {
team = allTeams[@"10"];
for ( NSDictionary *teamArray in team )
{
teams = [NSArray arrayWithObjects: teamArray[@"team"], nil];

}
}

return teams;
}

ViewController
- (void)viewDidLoad
{
[super viewDidLoad];


JSONLoader *jsonLoader = [[JSONLoader alloc] init];
NSURL *url = [[NSBundle mainBundle] URLForResource:@"teams" withExtension:@"json"];

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
teams = [jsonLoader locationsFromJSONFile:url];

int i = [teams count];

NSString *string = [NSString stringWithFormat:@"%d", i];

NSLog(@"%@", string);

});
}

最佳答案

您需要将对象添加到现有数组中,而不是每次都重新初始化它

    teams = [NSArray arrayWithObjects: teamArray[@"team"], nil];

应该
else {
team = allTeams[@"10"];
teams = [NSMutableArray array];
for ( NSDictionary *teamArray in team )
{
[teams addObject:teamArray[@"team"]];

}

另外,您正在使用此代码发送同步请求
NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil];

您应该使用 sendAsynchronous方法。同步请求可能会被操作系统本身终止,并可能导致稍后的混乱和错误。

关于ios - iOS-异步创建的数组仅返回一个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22514976/

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