我按照Apple Docs NSMetadataQuery中的描述使用来搜索我的iCloud文件。我只有一个文件,我知道它的名字。我的问题是,有时这个文件不存在(我想因为它还没有下载),NSMetadataQuery无法找到它。
曾试图强制下载NSFileManager startDownloadingUbiquitousItemAtURL:error:
并且它返回一个错误。 (阅读编辑)
我的解决方案是我第一次创建文件,然后我猜它存在,我用UIDocument打开它。但它可能不存在,或者可能是用户第一次打开应用程序。我无法确定这些事情。我的第一个问题是:如果UIDocument打开文件,则意味着它在某个地方找到了该文件。如果它不存在,它怎么能使用该文件?
然后,第二个问题:如果我的应用程序必须管理多个文件或名称未知的文件。如果NSMetadataQuery不起作用,我怎样才能找到它们。
修改
如果startDownloadingUbiquitousItemAtURL
应该用于开始下载文件,我怎么知道文件何时完成下载(可能带有通知)?但是,更重要的是:如果总是说(删除原始名称),我如何下载文件?
Error Domain=NSPOSIXErrorDomain Code=2 "The operation couldn’t be completed.
No such file or directory" UserInfo=0x166cb0 {
NSDescription=Unable to get real path for Path
'/private/var/mobile/Library/Mobile Documents/teamid~com~team~app/Documents/file.extension'
}
答案 0 :(得分:7)
我建议iCloud文件的以下加载例程。它涉及4个步骤:
这是代表这四个步骤的代码:
NSPredicate *pred = [NSPredicate predicateWithFormat:@"NOT %K.pathExtension = '.'", NSMetadataItemFSNameKey];
答案 1 :(得分:1)
错误Domain = NSPOSIXErrorDomain Code = 2“操作无法完成。没有这样的文件或目录”UserInfo = 0x448500 {NSDescription =无法获取路径的真实路径'/ private / var / mobile / Library / Mobile Documents /~UbiquitousDir~/Documents/MyDocument.ext'
(在iPad 2上正常工作)
然后我会做NSMetadataQuery,但后来又没有结果。 (在iPad 2上工作就可以在iCloud上查看文档了。)
我检查了无处不在的文件是否存在,但错误表明它不存在。
我尝试使用[fileMgr evictUbiquitousItemAtURL:ubiquitousDocumentsDir& error],但确实成功了。但是当我尝试使用NSMetadataQuery时,它仍然没有结果。
希望这有助于找出两种情况下的错误。
更新:好的,我从备份恢复的iCloud存在真正的问题:
答案 2 :(得分:0)
我有类似的问题,metadataQueryDidUpdate和metadataQueryDidFinishGathering会触发,但NSMetadataQuery的结果将为空。有一个配置文件问题,Xcode没有告诉我,直到我试图在我的设备上测试它,它失败了,说我的包标识符无效(它不是)。
为我修复的是进入“首选项”并单击“配置”配置文件的“全部下载”按钮,然后在Xcode中执行“清理”。重建,运行,我的所有文件都出现了。检查开发人员门户,确保没有任何配置文件标记为无效。我没有一个,所以它不需要触发它,但它可能会发生。
不完全科学,但这对我有用。