问题标签 [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 投票
2 回答
2992 浏览

ios - 如何创建 NSMetaDataQuery 并在后台线程上获取结果?

默认情况下NSMetaDataQuery,在主线程上接收结果通知。似乎您必须query.startQuery在主线程上调用,但您可以使用[query.setOperationQueue:]来设置将发送结果通知的队列。

理想情况下,我希望后台线程接收这些结果并对其进行处理,并且根据找到的文件,我将设置变量或将通知发布到主线程。

我不明白的是如何创建操作队列以及如何处理该队列上的通知。所需的任何类的示例代码以及应在何处以及如何创建它们的详细信息都会很棒。我已阅读 Apple 文档,但无法理解如何创建可以处理通知的队列。

谢谢

0 投票
1 回答
77 浏览

uitableview - 如何用需要排序的异步内容正确填充 UITableView

我有一堆不同大小(> 100)的文件存储在 iCloud 中。我有一个NSMetadataQuery返回这些文件的。它们NSMetadataQuery以随机顺序从对象报告给我的应用程序。

我打开它们并提取几个字符串,然后将它们排序并显示在UITableView.

我尝试了两种方法:A)加载每个文件,对文件信息数组进行排序,然后reloadData每次UITableView调用。B)等待所有文件加载完毕,然后对“完整”数组进行排序,然后调用reloadData一次。

选项 B 显然更好,但基本上用户看到结果所需的时间一样长。如何做到这一点最好?

我是否需要将我在其中显示的数据提取UITableView到不同的文件(即 PLIST)中,以便在后台加载实际数据时更快地加载并显示它?或者我是否需要通过跟踪 Array 然后调用reloadRowsAtIndexPaths:随后由于排序而更改的每一行来基本上扩展实现 A?

这种情况的最佳实践是什么?

谢谢

0 投票
1 回答
705 浏览

ios - NSMetadataQuery 不起作用

我正在尝试在我的应用程序中使用 iCloud。在模拟器中,我注意到在 iCloud 中的新文件启动后需要很短的时间才能添加到 ubiquity 容器中。因此,为了刷新我的 UI 以反映这些更改,我设置了一个 NSMetadataQuery,如下所示:

refreshFiles从来不叫...

我的应用程序将其文件直接保存在ubiquityContainer(an NSURL) - 它不创建任何子目录...

我究竟做错了什么?

0 投票
1 回答
2099 浏览

ios - 从 iCloud 下载文件时显示进度百分比?

我想在从 iCloud 下载 UIDocument 时显示进度条。

我尝试保留NSMetadataItem对查询的引用,每秒询问它的属性,但密钥NSMetadataUbiquitousItemPercentDownloadedKey要么不存在,要么100在文档下载后突然更改为。

相关代码:

0 投票
1 回答
424 浏览

c++ - NSMetaDataQuery:没有收到更新或收集完成的通知

我正在尝试一些代码来使用 NSMetaDataQuery 来获取基于捆绑标识符的应用程序路径。我在关注苹果开发网站中的示例代码:静态聚光灯搜索实现。

我为它写了以下文件

定义如下:

我正在调用中的GetAppPAth方法main。我已经添加了必要的头文件。代码编译并运行,但我没有收到两个观察者的任何通知。我在两种方法中设置了断点queryDidUpdate& initalGatherComplete。但他们永远不会被击中。我认为失败是因为我的主要代码没有等待搜索完成。但即使我在 main 中进行了一些等待,它也无法正常工作。我还尝试了以下问题中的代码:不太了解 NSMetadataQuery 但它以无限while循环结束。

0 投票
0 回答
360 浏览

objective-c - 使用 NSMetaDataQuery 和 NStableView 数据源方法实现 Spotlight 功能

我已经在我的项目中使用NSMetadataQuery. 在收到NSMetadataQueryDidFinishGatheringNotification通知时,我在格式化后调用 tableView 方法的 reloadDataNSMetadataItem方法NSMetadataQuery。我面临以下两个问题。

  1. [query startQuery]当mac中有大量数据时,会花费太多时间。
  2. 没有得到NSMetadataQueryDidUpdateNotification;

当我使用NSArrayController而不是NStableViewDataSource将其与query.results. 因为我需要格式化 NSMetadataItem所以我不能使用它。

任何人都可以回答如何接收批处理通知以获得更好的性能NSMetaDataQuery。或任何其他提高性能的方法[query startQuery]

下面是我已经实现的代码。

0 投票
1 回答
287 浏览

ios - iCloud - NSMetadataQuery 返回旧结果,显示已删除的文件

正如标题所说,我到 iCloud 的 NSMetadataQueries 有时会显示我刚刚从 iCloud 中删除的文件。

我什至可以在被删除后下载它们。有谁知道是什么导致查询返回错误的结果/我能做些什么来防止这种情况?

0 投票
1 回答
511 浏览

ios - NSMetadataQuery 的更新通知干扰(运行循环?)

上周,我向一位 Apple 工程师发送了一封电子邮件,告知我的NSMetadataQuery.

这是电子邮件:

你好,

我正在编写一个基于文档的应用程序或 iOS,我的重命名方法(将文档移动到新位置)似乎与正在运行的 NSMetadataQuery 冲突。

调用 move 方法后查询会更新几次,第一次是刚刚移动的项目的旧 URL,下一次是新 URL。但是,由于我的更新方法(如下),如果自更新以来已删除 URL,我的模型将删除已删除的 URL,反之亦然,如果它发现 URL 尚不存在。

我认为我的问题是两个问题之一,要么是 NSMetadataQuery 的更新方法不足,并且在删除之前不检查项目的 URL 是否有“正确”属性(尽管查看文档我看不到任何暗示我的东西)我错过了一些东西)或者我的重命名方法没有做它应该做的事情。

我尝试在重命名方法开始时禁用更新,并在所有完成块完成后重新启用,但这没有任何区别。

我的 NSMetadataQuery 的更新方法:

我的重命名方法:

我几乎立刻就得到了答复,但从那以后就没有任何答复。

这是回复

让我印象深刻的一件大事是您对 disableUpdates() 和 enableUpdates() 的使用。您在运行循环的同一轮中执行它们,但 NSMetadataQuery 异步提供结果。由于此代码在您的更新通知中执行,因此它与查询同步执行。因此,从查询的角度来看,它将通过发布通知开始传递更新。发布通知是一个同步过程,因此在发布通知时,更新将被禁用并重新启用。因此,当查询完成发布通知时,它会回到与开始交付结果时完全相同的状态。听起来这不是您想要的行为。

这是我需要帮助的地方

我假设 NSMetadataQuery 有某种缓存,当更新被禁用时它会添加结果,当启用时,那些(可能很多)缓存结果会循环通过,每个缓存结果都通过更新通知发送。

无论如何,我查看了 iOS 上的运行循环,虽然我自己尽可能多地了解它们,但我不明白回复有什么帮助,即如何实际解决问题 - 或者是什么导致了问题.

如果有人有任何好主意,我很乐意为您提供帮助!

谢谢。

更新

这是我的函数何时开始和结束的日志:

0 投票
0 回答
192 浏览

c++ - Spotlight API (NSMetadataQuery) 不返回结果

我正在尝试在 C++\Qt 项目中使用 NSMetadataQuery,我让它编译并运行,但我只得到 NSMetadataQueryDidStartGatheringNotification。

我已经看到很多关于这个问题的问题,但没有一个对我有用。

该项目(目前)有3个文件:

这是相关代码的片段:http: //pastebin.com/g4cKYPkm

我写了两次,这个版本是从苹果示例“spotlighter”中复制粘贴减去 GUI 所需的代码(我的项目是控制台项目),两次我都得到了相同的结果。

许多答案说我需要在 mainThread 中运行 startQuery ,我只有一个线程,我使用 [NSThread isMainThread] 来查看我是否真的在 mainThread 上运行。

我在调用 startQuery 之后立即添加了一个循环

我知道查询开始了,它正在收集,它没有停止,结果和队列大小都是 0。

知道我做错了什么吗?知道如何分析问题吗?谢谢你。

编辑:我与 Qt Creator 一起工作,我用 XCode 尝试了相同的代码,但没有运气:(

0 投票
2 回答
1093 浏览

ios - NSMetadataQuery 结果中未包含 iCloud Drive 文档

我有一个基本的 iOS 8 应用程序,它在应用程序的 iCloud 容器和 iCloud Drive 中列出了用户的文档。

我的问题是,直接在 iCloud Drive(Finder → Go → iCloud Drive)中的文档不包含在元数据查询的结果中。该查询仅在应用程序的 iCloud 容器Documents文件夹中返回结果。

我像这样初始化查询:

权利如下所示:

更奇怪的是:iCloud Drive 中的一些文档有时会出现,但如果我将它们从 iCloud Drive 中移出并重新移入,它们就不再显示了。