我已经使用dispatch_async在后台放入一个xml文档的解析,我把信息放在一个数组中,并且,对于一个for循环,我会将每个元素的内容分配给UILabel(现在),问题是在输出控制台中我可以看到每个元素的正确内容,但是uilabel只是在经过长时间的延迟之后才被添加。
代码:
#define kBgQueue dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
dispatch_async(kBgQueue, ^{
NSData *xmlData = [[NSMutableData alloc] initWithContentsOfURL:url];
NSError *error;
GDataXMLDocument *doc = [[GDataXMLDocument alloc] initWithData:xmlData options:0 error:&error];
NSArray *areaCortina = [doc nodesForXPath:@"query" error:nil];
int i=0;
for (GDataXMLElement *element in areaCortina) {
NSLog(@"%@",[[element attributeForName:@"LiftName"] stringValue]); //data are shown correctly
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, (30+10)*i, 200, 30)];// don't appear after log
[label setText:[[element attributeForName:@"name"] stringValue]];
[self.view performSelectorOnMainThread:@selector(addSubview:) withObject:label waitUntilDone:YES];
i++;
}
正如您所看到的,我已经使用了performSelectorOnMainThread但是没有使用,标签不会一次出现,而是在块结束后的10或15秒后正确显示。
想法?
提前致谢
确定编辑1
感谢Shimanski Artem的建议,我现在有以下几点:
#define kBgQueue dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
...
dispatch_async(kBgQueue, ^{
NSData *xmlData = [[NSMutableData alloc] initWithContentsOfURL:url];
NSError *error;
GDataXMLDocument *doc = [[GDataXMLDocument alloc] initWithData:xmlData options:0 error:&error];
NSArray *areaCortina = [doc nodesForXPath:@"query" error:nil];
self.data = [[NSMutableArray alloc] init];
for (GDataXMLElement *element in areaCortina) {
[self.data addObject:[[element attributeForName:@"name"] stringValue]];
}
[[NSNotificationCenter defaultCenter] postNotificationName:@"name" object:self];
}
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(caricaItem) name:@"name" object:nil];
...
} //end method
-(void) caricaItem
{
int i=0;
for (NSString * string in self.dati) {
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, (30+10)*i, 200, 30)];
[label setText:string];
[self.view addSubview:label];
i++;
}
}
我把uilabels的创建放在了调度之外,在caricaItem方法中,我已经准备好了一个充满宝贵数据的数组,但是同样的延迟......如果在caricaItem中我使用的是UITableView ......
什么是正确的方法?
由于