gpt4 book ai didi

ios - 同步打开 UIDocument

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:18:26 26 4
gpt4 key购买 nike

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

在某些地方,我可以轻松地用相应的 UIDocument 处理替换 CoreData 的使用,但是在某些地方,我真的很难用异步代码替换同步代码。主要是当我需要即时打开一些文档时,仅用于快速访问,例如在计算过程中。

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

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

  • 每个活跃用户一个文档(不同的用户可以登录/注销)
  • 每位用户 + 每年一个文档(应用可以显示选定的年份)
  • 每位用户 + 每年多个数据文档
  • 一些更多的元数据文档,它们只能在内存中加载一次(这里没问题)

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

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

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

我敢打赌,将所有文档加载到内存中是个坏主意,对于 iCloud 同步也是如此。

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

最佳答案

您可以通过强制当前线程等待某个条件来同步打开多个文档:

- (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];
}
}

不过,我不建议在主线程上执行此操作,因为文档可能需要一些时间才能打开。

关于ios - 同步打开 UIDocument,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23151526/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com