问题标签 [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 回答
1986 浏览

xcode - 为简单响应设置 NSMetadataQueryDidUpdateNotification

我正在尝试NSMetadataQueryDidUpdateNotification在 OS X 应用程序上启动并运行,以在我的 iCloud 通用容器中的文件更新时提醒我。我一直在做很多研究(包括阅读其他 Stack 答案,例如thisthisthisthis),但似乎我仍然没有完全正确。

我有一个从 NSDocument 子类化的“CloudDocument”对象,它在 H 中包含以下代码:

这是 M 文件:

根据我的最佳理解,如果一个预先存在的查询正在运行,那应该停止一个预先存在的查询,设置一个通知以通知对 ubiquity 容器的更改,然后启动查询,以便它从这里开始监视更改。

除了,显然情况并非如此,因为我Notification created在启动时进入了日志,但Something changed!!!在我更改 iCloud 文档时从未登录。

谁能告诉我我错过了什么?如果你超级棒,你会帮我提供一些代码示例和/或教程吗?

编辑: 如果重要/有帮助,我的无处不在的容器中只有一个文件正在同步。它被称为“笔记”,所以我使用来自以下位置的 URL 结果访问它:

其中“kAllNotes”设置为#define kAllNotes @"notes".

编辑#2:通过我与 Daij-Djan 的对话,我的代码有了很多更新,所以这是我更新的代码:

0 投票
1 回答
728 浏览

cocoa - NSMetadataQuery 说没有文档,尽管数据成功同步?

我正在尝试让我的 OS X 应用程序根据对 iCloud 文档的更改自动更新,但我很难让通知正常工作。具体来说,我得到了一些代码,应该列出我的所有结果NSMetadataQuery(这样我就可以进行一些测试和确认),但它返回 0 结果。尽管事实上我的无处不在的容器中显然有一些东西,因为数据正在从我的 OS X 应用程序成功上传,并在启动时再次成功下载。这就是我现在所拥有的。

云文档.h:

云文档.m:

我看到的结果是queryDidUpdate:在启动时被调用 2-3 次,全部来自NSMetadataQueryDidFinishGatheringNotification. 问题是,“resultCount”变量始终为 0,因此logAllCloudStorageKeysForMetadataItem永远不会被调用,也NSMetadataQueryDidUpdateNotification永远不会被调用,无论我多久编辑一次云文档。

任何人都可以就搜索返回 0 结果的原因提供任何建议,尽管显然有一个文件正在来回同步?或者更好的是,您能完全看到代码有什么问题吗?我可以做些什么来NSMetadataQueryDidUpdateNotification走上正轨并告诉我何时对我的文件进行了编辑?顺便说一句,我正在使用以下方法保存文件:

其中“kAllNotes”=“笔记”。

预先感谢您的帮助!

编辑: 请注意,当我说它同步成功时,由于 NSMetadataQuery 而不是这样做的。我在cloudDoc = [[CloudDocument alloc]initWithContentsOfURL:[self notesURL] ofType:NSPlainTextDocumentType error:nil];其他地方有一行加载 CloudDocument,所以我知道那里有一个文档,并且我知道它正在被应用程序的 iOS 版本更改,但我现在试图掌握的 NSMetadataQuery 只是在那里与 一起工作NSMetadataQueryDidUpdateNotification,但似乎都没有正常工作。

另外,我绝对是初学者,因此非常非常感谢提出建议时的代码片段和示例!

0 投票
1 回答
3651 浏览

ios - 如何确定文件是否存在于 iCloud 文件夹中?

我有一个将文件存储在 iCloud 中的 iOS 应用程序。当我启动应用程序时,我想确定以前的设备是否已经上传了任何文件。我启动第一台设备并将文件添加到 iCloud(我可以在我的 Mac 上的 Mobile Documents 文件夹中看到它们)。然后我在第二台设备上启动应用程序并尝试使用以下 NSMetadataQuery 来查看是否已上传任何文件,但它返回 0 结果。如果我继续运行该查询,大约 8-10 秒后它会返回结果。

当我收到查询的通知时 resultCount 为 0

如果文件存在于 iCloud 中,NSMetadataQuery 不应该返回一个 resultCount,即使它没有被下载?除了在 15-30 秒后尝试结束和超时之外,还有什么方法可以测试文件是否存在?

0 投票
1 回答
565 浏览

ios - iOS 中 NSMetaDataQuery 的 NSPredicate predicateWithFormat

我需要将我的自定义字符串附加到NSPredicate.

所以我写了以下代码。

但是,当我测试它时,它只返回以下值。

占位符%@未正确附加。它只显示%@标志。

我怎样才能做到这一点?

0 投票
0 回答
444 浏览

ios - UIManagedDocument、iCloud 和文档类型

我有一个使用 UIManagedDocument(即核心数据)文档格式的应用程序。为了让生活有趣,我试图让它与 iCloud 一起工作。我已经设法达到可以得到以下两个选项之一的地步:

  1. 它可以工作,但在 iCloud 设置中,文档都显示为DocumentMetadata.plist,不用说,这很令人困惑
  2. 现有文档在 iCloud 设置中正确显示,但我无法创建新文档

显然,这些都不可接受(尽管显然第二个是最糟糕的。)

在场景一中,我没有文档类型或导出的 UTI 类型,我设置了我NSMetadataQuery的查找DocumentMetadata.plist(因为那是一个文件并且查询只能找到被认为是文件的东西)。

在此处输入图像描述

在场景二中,我确实定义了文档类型和导出的 UTI 类型。在这种情况下,NSMetadataQuery查找我的文档类型的文件扩展名。在这种情况下,奇怪的是该saveToURL:completionHandler:方法从不调用完成块:

(在第一种情况下确实如此。)

NSMetadataQuery我的猜测 - 这是一个猜测 - 是它使用与查看文档的文件“guts”何时创建相同的机制,但是,因为我的文档是一个com.apple.package它看不到内部并且认为它不是完成的。

我错过了什么?您是否只是不应该将托管文档放在 iCloud 的用户可见部分中?

0 投票
1 回答
609 浏览

ios - iCloud - NSMetadataQuery 不使用 NSMetadataItemFSCreationDateKey 排序

我正在从 iCloud 获取数组中的文件列表,我希望这些文件使用NSMetadataItemFSCreationDateKey或进行排序NSMetadataItemFSContentChangeDateKey。但它并没有按照给定的方式返回NSSortDescriptor

这是我的代码,如果缺少任何内容或我需要添加任何内容,请建议我。

谢谢。

0 投票
1 回答
222 浏览

cocoa - NSMetadataQuery 在 Lion、Mountain Lion 或 Mavericks 中找不到文件

如果您创建一个 vanilla 项目并将其作为您的应用程序委托的实现:

您应该能够在 NSMetadataQuery 上“最近”引入(狮子后)以下高度异常的行为:它显然不再有效。

如果您按原样运行应用程序,它应该记录类似的内容"searchProgressed 1204",表示查询找到的结果。但是,如果您在注释掉另一个谓词之后运行它,它什么也找不到。

我已经尝试了该行的许多变体,包括通配符或%K占位符的各种表述,将占位符更改LIKE[c]为其他形式,当然,使用诸如NSMetadataItemFSNameKeyNSMetadataItemURLKeykMDItemContentType. 除了上面的单一、最简单的情况外,没有任何效果

我一定错过了关于 NSMetadataQuery 的一些重要内容,我之前广泛使用它并取得了巨大的成功,因为否则每个人都会评论它是多么无用。

0 投票
1 回答
533 浏览

cocoa - NSMetadataQuery 在将文档移动到 iCloud 后找不到文档

在我的 Mac 应用程序中,我可以NSMetadataQuery查看应用程序的 iCloud 目录。当用户决定从应用程序中启用 iCloud 时,我按以下顺序执行以下操作:

  1. 调用[[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:nil]以建立对 iCloud 容器的访问权限
  2. 启动 a查找iCloud 容器中的NSMetadataQuery所有文件(模式:)"*"
  3. 现在我遍历本地容器中的所有文件,并通过使用将它们移动到 iCloud[fileManager setUbiquitous:YES itemAtURL:fileURL destinationURL:targetURL error:&error]

我有两种类型的文档要移至 iCloud:

  1. 存储为文件包的实际文档
  2. 对于每个文档,我都有一个.preview文件作为简单的二进制文件

我的问题是元数据查询返回我的二进制预览文件,而不是我的实际文档,直到我重新启动我的应用程序(或从终端打开应用程序的 iCloud 文件夹的 Finder 窗口 - 在这种情况下,我的应用程序得到另一个查询结果所有文件)。

那么这是一些奇怪的缓存问题吗?这是因为文件是文件包而不是简单的二进制文件吗?

我不明白为什么这应该是一个问题。如果我重新启动我的应用程序,查询确实会正确返回所有文件。

这可能是我的自定义文档类型导出方式的问题Info.plist吗?

0 投票
1 回答
415 浏览

icloud - 无法调用 NSMetadataQueryDidUpdateNotification

我想使用 跟踪我上传到 icloud 的文件的百分比NSMetadataQuery,但它没有用。

这是我的代码:

}

liveUpdate:note方法没有调用。有人可以帮助我如何修复此代码。谢谢你

我编辑了我的代码...

这是我的新代码

它仍然无法调用 liveupdate 方法。我的代码有什么问题?

0 投票
1 回答
77 浏览

icloud - 立即在 iCloud 中删除项目

我使用 NSFM 的方法 removeItemAtURL 来删除 iCloud 中的一些项目,尽管在那之后我运行 NSMetaDataQuery 并且它仍然可以看到这个项目 3 秒。有没有办法来解决这个问题?我正在尝试将项目上传到 iCloud,如果存在具有此类名称的文件,我需要替换它,然后跟踪 NSMetaDataItem 的 uploadingPercentKey 以将其显示给用户,尽管正如我之前所说,该项目仍然从 valueForKey:NSMetadataUbiquitousItemIsUploadedKey 返回 YES取出后 3 秒。