gpt4 book ai didi

ios - NSMetadataQuery 忽略自定义文件包类型

转载 作者:可可西里 更新时间:2023-11-01 03:56:22 31 4
gpt4 key购买 nike

我正在使用 UIManagedDocument 来管理我在 iCloud 中的文件。像这样设置 NSMetadataQuery 之后:

iCloudQuery = [[NSMetadataQuery alloc] init];
[iCloudQuery setSearchScopes:
[NSArray arrayWithObject:NSMetadataQueryUbiquitousDocumentsScope]];
[iCloudQuery setPredicate:
[NSPredicate predicateWithFormat:@"%K like %@", NSMetadataItemFSNameKey, @"DocumentMetadata.plist"]];

我遇到了一个奇怪的问题 - 当我的文档命名时没有文件扩展名(例如 @"NewDocument2")或像 .txt 这样的公共(public)扩展名,元数据查询正确找到了 DocumentMetadata.plist 文件。但是,当使用我的自定义文件扩展名时,查询永远找不到任何东西......当查询开始时,也不会在我添加新文档时。

在我看来,查询可能正在查看带有自定义文件扩展名的我的文档,但没有意识到它实际上是一个目录(无论如何是一个文件包),并且所以不会在里面查找 DocumentMetadata.plist 文件。但是,我已经在应用程序的 info.plist 中声明了我的自定义 UTI。

也许我错误地申报了我的尿路感染?我按照 Apple 的指导方针(在 Document-Based App Programming Guide for iOSUniform Type Identifiers Overview 中)创建它,但似乎出了点问题。


编辑:info.plist 中的“Exported UTIs”下,我的类型设置为符合“com.apple.package”。


编辑:我还在为这个问题苦苦挣扎。我现在正在通过不使用文件扩展名来解决这个问题。

使用自定义文件扩展名时,我在处理iCloud元数据查询结果,DocumentMetadata.plist文件肯定在文件包里面,但是元数据查询看不到。枚举查询结果时,会在日志中打印如下内容:

<iCloud Container URL>/Documents/
<iCloud Container URL>/Documents/New%20Document.spdoc/
<iCloud Container URL>/Documents/New%20Document.spdoc/DocumentMetadata.plist
<iCloud Container URL>/Documents/New%20Document.spdoc/StoreContent.nosync/
<iCloud Container URL>/Documents/New%20Document.spdoc/StoreContent.nosync/(A%20Document%20Being%20Saved%20By%20<AppName>%202)/
<iCloud Container URL>/Documents/New%20Document.spdoc/StoreContent.nosync/(A%20Document%20Being%20Saved%20By%20<AppName>)/
<iCloud Container URL>/Documents/New%20Document.spdoc/StoreContent.nosync/.persistentStore_SUPPORT/
<iCloud Container URL>/Documents/New%20Document.spdoc/StoreContent.nosync/.persistentStore_SUPPORT/_EXTERNAL_DATA/
<iCloud Container URL>/Documents/New%20Document.spdoc/StoreContent.nosync/persistentStore

(“CoreDataLogs”目录中还有一堆文件,但为了简洁起见,我没有在此处显示它们)。

我只能认为这个问题是我的文件包UTI创建错误有关。有没有其他人成功地将自定义文件包与 iCloud 一起使用?这是错误吗?

最佳答案

这是设计使然。

该 API 也适用于 Spotlight。它不应该进入包文档,因为这些文档的内容基本上是私有(private)的。对于 iCloud,这并没有多大意义,但我怀疑他们不会改变它。根据使用地点的不同,API 以两种不同的方式工作是没有意义的。

我想这是一件历史性的事情——在 Mac 上你可以实现一个 Spotlight 导入器来处理你的自定义文档类型。在 iOS 上,我认为这还不可能(如果我错了请纠正我)。所以现在,您只需解决 API 的这个“功能”。

您可以改为搜索文档,然后只从那里获取元数据。否则,像您所做的那样链接扩展应该可行。

关于ios - NSMetadataQuery 忽略自定义文件包类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9026242/

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