iCloud:获取云中存在的文件数组

Posted

技术标签:

【中文标题】iCloud:获取云中存在的文件数组【英文标题】:iCloud: getting an array of files present in the cloud 【发布时间】:2011-10-23 21:06:42 【问题描述】:

我想获取存储在用户 iCloud 帐户中的所有 txt 文件的列表。检查是否启用了 iCloud 后,我尝试了以下操作:

NSMetadataQuery *query = [[NSMetadataQuery alloc] init];
        _query = query;
        [query setSearchScopes:[NSArray arrayWithObject:NSMetadataQueryUbiquitousDocumentsScope]]; 

        NSPredicate *pred = [NSPredicate predicateWithFormat:@"self ENDSWITH '.txt'"];
        [query setPredicate:pred];

        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(queryDidFinishGathering:) name:NSMetadataQueryDidFinishGatheringNotification object:query];
        [query startQuery];

但我得到以下控制台输出和崩溃:

    2011-10-23 21:58:19.587 iCloudText[9922:707] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'NSComparisonPredicate with left expression which is not NSKeyPathExpressionType given to NSMetadataQuery (SELF ENDSWITH ".txt")'
*** First throw call stack:
(0x30ef58bf 0x3809a1e5 0x30ef57b9 0x30ef57db 0x37f4e725 0x37f4b0b5 0x29b3 0x2c4b 0x32ec77eb 0x32ec13bd 0x32e8f921 0x32e8f3bf 0x32e8ed2d 0x33a7ae13 0x30ec9553 0x30ec94f5 0x30ec8343 0x30e4b4dd 0x30e4b3a5 0x32ec0457 0x32ebd743 0x2437 0x23dc)
terminate called throwing an exception(gdb) 

定义谓词时我做错了什么?我已经阅读了文档,但无法弄清楚我哪里出错了。任何帮助将不胜感激!

【问题讨论】:

【参考方案1】:

尝试使用[NSPredicate predicateWithFormat:@"%K ENDSWITH '.txt'", NSMetadataItemFSNameKey] 作为谓词。 SELF 在这种情况下不引用文件名。

【讨论】:

谢谢!工作完美。我知道这是另一个问题,但是我将如何仅获取文件夹列表?我会使用 %K ISDIRECTORY 或类似的东西吗?谢谢。

以上是关于iCloud:获取云中存在的文件数组的主要内容,如果未能解决你的问题,请参考以下文章

获取 GCS 中文件夹的文件数和总大小的最快方法?

iCloud > 管理存储仅列出“加密文件”

如何获取目录下的文件数(一行Python)

计算 iPhone 文档中带有扩展名的文件数

Linux最大打开文件数

现有的 UIDocument 不会在 iCloud 上更新