问题标签 [nsmetadataquery]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
268 浏览

macos - 如果我观看每个 NSMetadataQueryGatheringProgress,我是否需要 NSMetadataQueryDidFinishGathering?

NSMetadataQuery在查询运行时发布NSMetadataQueryGatheringProgress,然后NSMetadataQueryDidFinishGathering在完成后发布。我收到了两个通知,它们工作正常。

不过,我注意到,当我得到 时NSMetadaQueryDidFinishGathering,自最终收集进度以来从未有任何新数据。是否保证始终如此?

我已经阅读了这两个常量的文档,我不清楚这是否是预期的。

如果我在 中处理传入的结果NSMetadataQueryDidFinishGathering?,那总是会得到我的每一个结果吗?

0 投票
3 回答
771 浏览

swift3 - NSMetaDataQuery 未完成

我正在尝试使用NSMetaDataQuery. 我能够开始查询,但它永远不会完成。这是我的代码。

这将打印以下内容:

didStart被调用,但从didFinish未被didUpdate调用。如果我在谓词中替换====[cd]替换,我会得到相同的结果。like更改NSMetadataQueryUbiquitousDocumentsScopeNSMetadataQueryUbiquitousDataScope没有效果。我错过了什么?

同样的问题似乎已经在这个论坛上多次提出,但我没有找到任何令人满意的答案。

0 投票
0 回答
175 浏览

ios - 如何正确追踪 iCloud 上传?

我正在尝试在我的应用程序中集成 iCloud 使用。我确实了解该过程的工作原理及其基础。我已经能够将内容上传到 iCloud,但我需要跟踪上传进度,以改进我提供给最终用户的 Ux。

因此,基本上我使用以下方法上传文档:

在我调用这个方法之前,我还要初始化一个 MetadataQuery。此查询是特定的,它应该通过文档名称及其 URL 作为参数来获取文档的进度。像这样的东西:

方法实现:

在此处输入图像描述

这样做之后,我只接收由触发的事件NSMetadataQueryDidStartGatheringNotification,即使如此,接收到的信息也不会带来任何可用的价值。

我期待从 接收事件NSMetadataQueryDidUpdateNotification,将 MetadataQuery 与结果一起获取以获取NSURLUbiquitousItemPercentUploadedKey值。但是,我没有收到任何此类通知,也无法监控上传进度。

我错过了什么吗?我没有想法,因为这看起来很简单,而且没有按预期工作。

(注意:我也需要在下载文档时实现类似的行为,我认为方法是相同的,只是更改查询的valueListAttributes. 我担心这个问题在我实现时会持续存在)

谢谢

0 投票
1 回答
341 浏览

metadata - 在 iOS App Sandbox 上获取本地文件的 NSMetadataItem

我知道在 iOS 上您只能NSMetadataQuery用于 iCloud 文件。但是,根据 Apple 的指南,您仍然可以NSMetadataItem通过手动搜索所需的文件来获取FileWrapper

iOS 允许在 iCloud 中搜索元数据以查找文件对应的文件。它只提供了Objective-C 接口来查询文件元数据,NSMetadataQuery并且NSMetadataItem只支持搜索iCloud 的搜索范围。

与桌面不同,iOS 应用程序的沙箱不能使用元数据类进行搜索。为了搜索应用程序的沙箱,您需要使用NSFileManager该类递归地遍历沙箱文件系统中的文件。一旦找到匹配的文件,您就可以按照您需要的方式访问该文件。您还可以使用NSMedatataItem该类来检索该特定文件的元数据。

但是,我找不到NSMetadataItem从 iOS 沙盒上的本地文件获取的方法。您可以从文件 URL 进行初始化NSMetadataItem,但这仅在 macOS 上可用。FileManager似乎也没有可以从中检索的 API NSMetadataItem

如何获取NSMetadataItemiOS App Sandbox 上的本地文件?

0 投票
0 回答
102 浏览

ios - NSMetadataQuery 获取多个(相同的)DidUpdateNotification

我正在验证一个应用程序是否可以在 iOS 11 上运行。

在 iOS 10 上,我NSMetadataQuery在 scope 上启动了一个NSMetadataQueryUbiquitousDocumentsScope,我得到了一个NSMetadataQueryDidFinishGatheringNotification。就是这样。这是由于查询而收到的唯一通知。

但是,在 iOS 11 上,我又得到了一个NSMetadataQueryDidFinishGatheringNotification,但此外,我得到了似乎是无限数量的NSMetadataQueryDidUpdateNotifications,以每秒 1 的近似速率进入,所有这些都具有相同的有效负载。

我承认我对 iCloud 同步不够熟悉,我不确定这里到底发生了什么,但我很确定这不是正确的行为。

这是 iOS 11 中的错误吗?任何人都可以指出我追踪发生了什么的方向吗?

0 投票
1 回答
154 浏览

ios - 等待 iCloud 上传完成?

我目前正在使用类似于以下内容的代码上传到我的 iCloud 容器:

这工作正常,它将数据写入我的 iCloud 容器,但如果我尝试使用以下命令快速查询容器:

startQuery除非我延迟几秒钟,否则该文件不会显示。我认为一旦writeToURL:(这是一个阻塞调用)完成,NSMetadataQuery应该能够立即找到它,但似乎并非如此。

有没有其他方法可以上传到我的 iCloud 容器并验证一切是否已完成?

0 投票
1 回答
315 浏览

swift - 如何改进使用 NSMetadataQuery 搜索 iCloud Drive 文件夹?

我正在尝试使用 NSMetadataQuery 列出 iCloud Drive 中特定文件夹的内容:

query.results有我期待的所有物品。但是,当应用程序的云容器中的项目数量很大(> 10K)时,它会花费很长时间并且使用约 100% 的 cpu 接近一分钟。

我试图通过设置searchScopes和/或设置将搜索范围限制为测试文件夹searchItems

但是没有用。请让我知道是否有办法将搜索限制到特定文件夹?或者,如果我可以使用不同的 api 来提高搜索速度?

0 投票
0 回答
136 浏览

objective-c - NSMetadataQuery 未在 macOS 10.13 的沙盒中触发

我一直在使用之前知道NSMetaDataQuery用户何时截取屏幕截图并且它工作正常。但是在我开始时我只会收到通知,而在更新时我没有收到任何通知。我什至用过and 。无法弄清楚 Apple 发生了什么变化以及如何使其发挥作用。sandboxmacOS10.1310.13NSMetaDataQueryNSURL startAccessingSecurityScopedResourcestopAccessingSecurityScopedResource

但是screenshotQueryUpdated,仅在拍摄新屏幕截图queryDidFinish时才调用。startQuery

0 投票
1 回答
299 浏览

ios - 没有收到 NSMetaDataQuery 更新通知

我有以下代码:

并且:

因此,上述“曾经工作”,跨两个设备。现在,两个设备都没有得到 queryDidUpdate() 调用。我试过删除应用程序,打开和关闭云权限,登录和退出 iCloud,重新启动设备。两个设备都可以读取它们的“冻结”云,但不会传播任何数据,也不会传递实时阶段通知。几天来,我确实在两台设备之间进行了一些繁重的测试(传输数百 MB 的图片)。而现在,一切都停止了。

每个设备的云令牌完全不同,但都是稳定的。使用 UIDocument 存储到云端。

我错过了什么吗?我需要在 iCloud 中重置什么吗?有没有我可以在某处检查的状态?

我不想更改应用程序包 ID 来摆脱困境……我想找到根本问题。感谢您的任何提示!

0 投票
1 回答
236 浏览

ios - 在 iCloud Drive 中执行“NSMetadataQuery”时出错

NSMetadataQuery在 iCloud Drive 中执行时出现以下错误:

[错误] 无法查询 iCloud Drive 项目:错误域 = BRCloudDocsErrorDomain 代码 = 16“此客户端的同步受限” UserInfo={NSDescription=此客户端的同步受限}

这可能是我的问题

我有一个免费的开发者帐户。NSMetadataQuery但是,我还没有发现任何关于在 iCloud Drive 中使用付费开发者帐户的要求。

请注意,我发现必须使用付费开发者帐户才能使用与 iCloud Drive 不同的 iCloud Key-Value 和 Document Storage。

我试过的

我使用以下代码进行查询(调用Test().getAllFilesIniCloud()):

开始查询时,它只打印,没有其他内容: