首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >同步打开UIDocument

同步打开UIDocument
EN

Stack Overflow用户
提问于 2014-04-18 09:44:38
回答 1查看 868关注 0票数 3

我目前正在重新设计我现有的应用程序,从CoreData存储到一个基于文档的应用程序,使用UIDocument子类。这主要是为了引入iCloud同步,因为iCloud同步在CoreData中一直存在问题。

在某些地方,我可以很容易地用相应的CoreData处理替换UIDocument使用,但是在某些地方,我真的很难用异步代码替换同步代码。主要是当我需要动态打开一些文档时,只需要快速访问,例如在计算期间。

我已经实现了例如调度组,以等待UIDocument操作,但在某些地方,这似乎并不合适。例如,当需要按顺序打开大量文档以完成计算时,这将导致非常复杂和奇怪的块和调度组链接。

为了更好地理解这个问题,让我粗略地描述一下我的应用程序使用的是什么文档:

  • 每个活动用户一个文档(不同的用户可以登录/注销)
  • 每个用户每年一份文档+(应用程序可以显示选定的年份)
  • 每个用户每年+多个数据文档
  • 更多的元数据文档,它们都只能装入内存一次(这里没有问题)

因此,基本上,对于一个用户,和两年的应用程序使用,可以有大约50个文档需要按需显示,并用于计算。

用户文档将始终打开并加载到内存中,我在这里看不到问题。对于其他文档,这并不容易,因为我需要动态加载它们,也可能是来自当前不活动的其他用户的文档(这消除了在内存中为当前用户加载所有文档的可能性)。

所以,,我的主要问题是,在处理大量文档时,什么方法是好的?

我敢打赌,将所有文档加载到内存中也是一个坏主意,这也涉及到iCloud同步。

是否有任何同步API,或强制同步/同步API包装器用于UIDocument**?** 的示例?

EN

回答 1

Stack Overflow用户

发布于 2014-06-11 14:49:54

通过强制当前线程在一个条件下等待,可以同步打开多个文档:

代码语言:javascript
复制
- (void)openDocumentsSynchronously:(NSArray *)documents
{
    __block NSUInteger waitingOnDocuments = documents.count;
    NSCondition *condition = [NSCondition new];

    for (UIDocument *document in documents)
    {
        [document openWithCompletionHandler:^(BOOL success) {

            waitingOnDocuments--;

            [condition lock];
            [condition broadcast];
            [condition unlock];
        }];
    }

    while (waitingOnDocuments > 0)
    {
        [condition lock];
        [condition wait];
        [condition unlock];
    }
}

不过,我不建议在主线程上这样做,因为打开文档可能需要一段时间。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23151526

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档