Ios UIDocumentStateSavingError存在后如何打开UIDocument?

Ios UIDocumentStateSavingError存在后如何打开UIDocument?,ios,objective-c,icloud,uidocument,nsmetadataquery,Ios,Objective C,Icloud,Uidocument,Nsmetadataquery,在我基于iCloud的应用程序中,我注意到,如果在UIDocument打开(且尚未关闭)时发生崩溃,文档的状态有时会变成UIDocumentStateSavingError,并且再也无法成功打开 在此之后运行[UIDocument openWithCompletionHandler::时,文档永远不会打开,返回NO表示success,返回5(uidocumentstatesclosed和UIDocumentStateSavingError)表示documentState 在iOS 5上,我还观察

在我基于iCloud的应用程序中,我注意到,如果在UIDocument打开(且尚未关闭)时发生崩溃,文档的状态有时会变成
UIDocumentStateSavingError
,并且再也无法成功打开

在此之后运行
[UIDocument openWithCompletionHandler::
时,文档永远不会打开,返回
NO
表示
success
,返回5(
uidocumentstatesclosed
UIDocumentStateSavingError
)表示
documentState

在iOS 5上,我还观察到,
nsMetadataQueryIDUpdateNotification
不断被调用(每秒),直到文件被删除并重新启动应用程序。这会导致应用程序中出现其他可用性问题

还有一件事,在developer.icloud.com上,我注意到该文件显示了第二个存在冲突的版本。但是,在我的任何设备上都找不到此冲突,即使重新启动或重新安装应用程序也是如此

如何使UIDocument正常打开?

以下是我迄今为止所做的尝试:

  • 检查
    [NSFileVersion UnsolvedConflictVersionsofItemnature::
    是否存在冲突,并使用
    [NSFileVersionRemoveOtherVersionsofItemnature:
    删除所有旧版本

  • 在调用
    [UIDocument openWithCompletionHandler:]
    将文件重新下载到设备之前,先调用
    [[NSFileManager defaultManager]executeUbiquitousItemAttribute:

  • 从developer.icloud.com下载主版本和冲突版本,查看其中是否有损坏或部分文件。都开得很好

  • 我的头撞在桌子上。初步结果不成功


我已经使用“RejectUbiquitousItemAttribute”修复了类似的问题。您是在检查成功还是抛出错误?两者:
executeUbiquitousItemAttribute:
都返回
YES
并且不会为我生成错误。您是在使用元查询获取文档名称吗?有时,当保存失败时,它会留下一个部分文件,这是查询返回的文件之一。如果它是一个部分文件,
executeubiquitousitemature:
会不会丢弃它并重新下载呢?我认为不会。当我遇到类似的问题时,我用我在这里发布的答案解决了它: