当UIActivityViewController呈现时,如何确保UIActivityItemProvider的项目准备就绪?

时间:2013-02-22 18:56:16

标签: multithreading ios6 nsoperation uiactivityviewcontroller uiactivity

根据文档[UIActivityItemProvider item]在辅助线程上运行。这非常适合不锁定UI,但我发现它在item显示时并不总是完整,例如在邮件撰写屏幕中。

我正在生成一个UIImage并将其保存到磁盘,以返回NSURL。在较长时间运行的图像生成任务中,它在呈现给用户时是不完整的。我已经尝试将它强制进入主线程,但它仍然会发生。

如何确保item完整?

1 个答案:

答案 0 :(得分:1)

这可以通过使用布尔值来保存项目的返回,直到文件的构建完成。如果要显示进度或在主视图上显示活动指示器,可以通过从主线程调用它来执行此操作。以下是此操作的代码段:

使用此功能在提供程序中设置活动视图控制器,以便加载进度视图。

self.parentViewController = parentVc;

这是具有阻止和反馈视图加载的项目功能。

self.wait = true;

[self prepareFile:^(){
    [self performSelectorOnMainThread:@selector(dismissProgressView) 
                                  withObject:nil waitUntilDone:NO];
}];

[self performSelectorOnMainThread:@selector(loadProgressView) 
                                  withObject:nil waitUntilDone:NO];

while (self.wait) {
    [self performSelectorOnMainThread:@selector(updateProgressView) 
                                         withObject:nil waitUntilDone:NO];
}

return self.completedUrl;

然后,您可以创建在主线程上调用的三个函数以显示进度视图,在等待文件完成时更新进度视图。在dismissProgressView函数的实现中,确保在dismissViewController完成时将wait boolean设置为false。