gpt4 book ai didi

ios - 下载 json 后如何重新加载表格

转载 作者:行者123 更新时间:2023-11-28 19:57:56 25 4
gpt4 key购买 nike

我在下载 JSON 格式的数据后重新加载表格时遇到问题。

使用 NSOperation 异步下载数据。

我使用的代码是这样的

- (void)viewDidLoad
{
[super viewDidLoad];

[self loadInformactionToSql];
}
-(void)loadInformactionToSql {
NSOperationQueue * queue = [NSOperationQueue new];
NSInvocationOperation * operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(downloadJSONBDD) object:nil];
[queue addOperation:operation];
}

-(void)downloadJSONBDD {
NSURL * url = [NSURL URLWithString:@"http://judokatium.com/index.php/api/Belts/getBeltsWithTechnicals"];
//Leer el JSON

NSData * allCinturonesTecnicasJson =
[[NSData alloc] initWithContentsOfURL:url];

NSError *error;

NSArray * allCinturonesJson =
[NSJSONSerialization JSONObjectWithData:allCinturonesTecnicasJson options:kNilOptions error:&error];

if(error) {
NSLog(@"%@, %@", [error localizedDescription], [error localizedFailureReason]);
} else {
NSDictionary * cintns;
cinturones = [[NSMutableArray alloc] init];
for(int i = 0; i < [allCinturonesJson count]; i++){
JLMCinturon * cinturon = [[JLMCinturon alloc] init];

cintns = [allCinturonesJson objectAtIndex:i];

cinturon.idCinturon = [cintns objectForKey:@"id"];

[cinturones addObject:cinturon];


}
[self.tablaCinturones reloadData];
self.tablaCinturones.hidden = NO;
}
}

下载的数据是正确的,但没有在表格中显示。

我该如何解决?

谢谢,抱歉我的英语不好。

最佳答案

把这些行

[self.tablaCinturones reloadData];
self.tablaCinturones.hidden = NO;

进入一个调度 block ,将它们移动到主线程

dispatch_async(dispatch_get_main_queue(), ^{
[self.tablaCinturones reloadData];
self.tablaCinturones.hidden = NO;
});

问题是 NSOperation 将您的方法调用移动到不同的线程,并且在 iOS 中无法从除主线程之外的任何线程更新 UI。

或者,您可以像@JulianKról 指出的那样使用 NSOperation

NSOperationQueue *mainQueue = [NSOperationQueue mainQueue];
NSInvocationOperation *reloadOperation = [[NSInvocationOperation alloc] initWithTarget:self.tablaCinturones selector:@selector(reloadData) object:nil];
NSInvocationOperation *hiddenOperation = [[NSInvocationOperation alloc] initWithTarget:self.tablaCinturones selector:@selector(setHidden:) object:@(NO)];
[mainQueue addOperation:reloadOperation];
[mainQueue addOperation:hiddenOperation];

关于ios - 下载 json 后如何重新加载表格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25473169/

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