gpt4 book ai didi

ios - NSMetadataQuery 启用更新

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:14:14 29 4
gpt4 key购买 nike

我无法理解更新如何使用 NSMetadataQuery。

我正在尝试确定文件是否已从 iCloud 下载完成。我最初的查询很清楚地告诉我文件没有下载,我可以开始下载,但如果下载文件需要任何时间,我想设置一个进度条。我调用了 enableUpdates,但它似乎并没有改变下载/下载状态或下载百分比,即使我相当确定文件正在下载。 (我陷入了一个 while 循环。如果我退出并重新运行应用程序,它会看到文件已下载并跳过 while 循环。)

我必须开始新的查询才能获得更新吗?如果是,enableUpdates 和 disableUpdates 的作用是什么?

是否有一些不同的方式必须调用初始查询才能获得更新?我从文档中的某些内容中得到了这种印象,但我找不到任何似乎可以解释如何解释的细节。

最佳答案

我已经设法解决了这个问题,但这是一个经典案例,尝试了很多不同的事情并遇到了很多砖墙,以至于我不再记得我做了什么来解决这个问题,更不用说我为什么会遇到这个问题了首先。也许我可以分享一些我遇到的事情。

一个是博客 http://blog.wadetregaskis.com/icloud-documentation-is-crap/ .本段解释了 NSMetadatQuery 的真正工作原理:

[This] explains something crucial about NSMetadataQuery: Long story short, NSMetadataQueryDidUpdateNotification does not do what you might expect. Certainly not what I expected. I read the documentation as saying that it would be used to deliver results, and NSMetadataQueryDidFinishGatheringNotification would be posted when the full first pass had completed. That’s a very typical pattern used elsewhere in Apple’s APIs (including Spotlight, so one would assume NSMetadataQuery would work the same). But it doesn’t.

Instead, all of the first full run’s results are buffered up and provided by NSMetadataQueryDidFinishGatheringNotification. NSMetadataQueryDidUpdateNotification is purely for subsequent, real-time changes.

我认为可能导致我出现问题的另一件事是,我可能同时激活了多个 NSMetadataQuery 实例。我不确定,我也不知道为什么这会阻止他们中的任何一个发送更新通知。

无论如何,以下代码现在对我有用:

if (usingIcloud) {
if (query) [query disableUpdates];

query.predicate = [NSPredicate predicateWithFormat:@"%K like '*.caf' or %K like '*.mov'", NSMetadataItemFSNameKey, NSMetadataItemFSNameKey];
query.searchScopes = [NSArray arrayWithObject:NSMetadataQueryUbiquitousDocumentsScope];

[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(updateUbiquitousDocuments:)
name:NSMetadataQueryDidFinishGatheringNotification
object:nil];

[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(updateUbiquitousProgress:)
name:NSMetadataQueryDidUpdateNotification
object:nil];

[query enableUpdates];
}

我能够获得更新,告诉我在我的 updateUbiquitousProgress 方法中下载了多少给定文件,并让它运行一个进度条。如果有人想了解更多或查看更多最终运行的代码,我很乐意提供帮助。

关于ios - NSMetadataQuery 启用更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16328363/

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