【问题标题】:How to ensure the item of a UIActivityItemProvider is ready when UIActivityViewController presents it?当 UIActivityViewController 呈现时,如何确保 UIActivityItemProvider 的项目准备就绪?
【发布时间】:2013-02-22 18:56:16
【问题描述】:

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

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

如何确保item 完整?

【问题讨论】:

    标签: multithreading ios6 nsoperation uiactivityviewcontroller uiactivity


    【解决方案1】:

    这可以通过使用布尔值来保存项目的返回,直到文件的构建完成。如果您想在主视图上显示进度或显示活动指示器,您可以通过从主线程调用它来实现。这是一个实际的代码 sn-p:

    使用此函数在您的提供程序中设置活动视图控制器以加载进度视图。

    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。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多