Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/113.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c IOS:如何使用异步TBXML调用刷新UI_Objective C_Ios_Tbxml - Fatal编程技术网

Objective c IOS:如何使用异步TBXML调用刷新UI

Objective 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 =

我使用TBXML解析httpxml文件,并在UILabel&UIImageView中显示内容。 对XML的调用是通过异步请求完成的

当我查看日志时,会立即打印成功块中的最后一个日志元素。UILabel&UIImageview中的更改仅在几秒钟后可见

如何让IOS在处理完XML后直接刷新UI

// 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的成功块中?