我目前正在使用UIDocument
子类将我现有的应用程序从CoreData存储重新设计为基于文档的应用程序。这主要是为了能够引入iCloud同步,因为CoreData中存在iCloud同步问题。
在某些地方,我可以轻松地将CoreData使用替换为相应的UIDocument
处理,但在某些地方,我真的很难用异步代码替换同步代码。主要是当我需要动态打开一些文档时,只能快速访问,例如在计算过程中。
我已经实施了调度组,等待UIDocument
操作,但在某些地方这似乎不合适。例如。当需要按顺序打开大量文档来完成计算时,这将导致块和调度组的链接非常复杂和奇怪。
为了更好地理解这个问题,让我粗略地描述我的应用程序使用的文档之王:
所以基本上,对于1个用户和2年的应用程序使用,可以有大约50个文档需要按需显示,并用于计算。
用户文档将始终打开并加载到内存中,我在这里看不到问题。对于其他文档,它不是那么容易,因为我需要动态加载它们,也可能是其他用户当前不活动的文档(这样就无法在内存中加载当前用户的所有文档)。
所以,我的主要问题是,处理大量文件的好方法是什么?
我敢打赌,将所有文档加载到内存中也是一个坏主意,同样也是关于iCloud同步。
是否存在UIDocument
的同步API或强制同步/同步API包装的示例?
答案 0 :(得分:1)
您可以通过强制当前线程在某个条件下等待来同步打开多个文档:
- (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];
}
}
我不建议在主线程上执行此操作,因为文档可能需要一段时间才能打开。