Objective c IOS:如何使用异步TBXML调用刷新UI
我使用TBXML解析httpxml文件,并在UILabel&UIImageView中显示内容。 对XML的调用是通过异步请求完成的 当我查看日志时,会立即打印成功块中的最后一个日志元素。UILabel&UIImageview中的更改仅在几秒钟后可见 如何让IOS在处理完XML后直接刷新UIObjective c IOS:如何使用异步TBXML调用刷新UI,objective-c,ios,tbxml,Objective C,Ios,Tbxml,我使用TBXML解析httpxml文件,并在UILabel&UIImageView中显示内容。 对XML的调用是通过异步请求完成的 当我查看日志时,会立即打印成功块中的最后一个日志元素。UILabel&UIImageview中的更改仅在几秒钟后可见 如何让IOS在处理完XML后直接刷新UI // Create a success block to be called when the async request completes TBXMLSuccessBlock successBlock =
// Create a success block to be called when the async request completes
TBXMLSuccessBlock successBlock = ^(TBXML *tbxmlDocument) {
// If TBXML found a root node, process element and iterate all children
NSLog(@"PROCESSING ASYNC CALLBACK");
if (tbxmlDocument.rootXMLElement)
[self traverseElement:tbxmlDocument.rootXMLElement];
myArticle.Body = [[StringCleaner sharedInstance] cleanedString:myArticle.Body];
// myArticle.Body = [myArticle.Body stringByConvertingHTMLToPlainText];
self.articleBody.text = myArticle.Body;
self.articleBody.numberOfLines= 0;
self.articleBody.lineBreakMode = UILineBreakModeWordWrap;
[self.articleBody sizeToFit];
// set scroll view size
self.articleBodyScrollView.contentSize = CGSizeMake(self.articleBodyScrollView.contentSize.width, self.articleBody.frame.size.height);
NSURL *url = [NSURL URLWithString:myArticle.Photo];
NSData *data = [NSData dataWithContentsOfURL:url];
if (data != NULL)
{
UIImage *image = [UIImage imageWithData:data];
// articlePhoto = [[UIImageView alloc] initWithImage:image];
[self.articlePhoto setImage:image];
}else {
NSLog(@"no data");
}
NSLog(@"FINISHED PROCESSING ASYNC");
// [self printArticles];
};
// Create a failure block that gets called if something goes wrong
TBXMLFailureBlock failureBlock = ^(TBXML *tbxmlDocument, NSError * error) {
NSLog(@"Error! %@ %@", [error localizedDescription], [error userInfo]);
};
// tbxml = [[TBXML alloc] initWithURL:[NSURL URLWithString:someXML]];
tbxml = [[TBXML alloc] initWithURL:[NSURL URLWithString:records]
success:successBlock
failure:failureBlock];
听起来像是您试图更新UI,但不是在UI线程上。将UILabel和UIImageView更新打包到主线程上的dispatch_async中,例如:
dispatch_async(dispatch_get_main_queue(), ^
{
[self.articlePhoto setImage:image];
});
你能再解释一下吗?在哪里添加调度异步代码?在TBXML的成功块中?