gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:28:35 27 4
gpt4 key购买 nike

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

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

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

谢谢

最佳答案

您可以尝试使用这段代码在后台线程中处理通知:

   NSMetadataQuery *query = [NSMetadataQuery new];
[query enableUpdates];
// Subscribe to query updates and process then in background thread
[[NSNotificationCenter defaultCenter] addObserverForName:
NSMetadataQueryDidUpdateNotification
object:nil queue:[NSOperationQueue new]
usingBlock:^(NSNotification __strong *notification)
{
// disable the query while iterating
[query disableUpdates];
for (NSMetadataItem *item in query.results)
{
//do here everything you want with the results
//e.g. get values with [item valueForAttribute:NSMetadataItemFSNameKey];
}
[query enableUpdates];
}];
[query startQuery];

仅供引用:

 [NSOperationQueue mainQueue] // added operations execute on the main thread
[NSOperationQueue new] // iOS 4 and higher - guaranteed to be on the background thread

P.S 要处理第一个结果,您应该订阅 NSMetadataQueryDidFinishGatheringNotification - 它会在接收者完成查询的初始结果收集阶段时发布,并且对于所有后续更新您应该像我的示例一样订阅 NSMetadataQueryDidUpdateNotification,因为您知道查询有两个阶段:收集所有当前匹配结果的初始收集阶段和第二个实时更新阶段。

关于ios - 如何创建 NSMetaDataQuery 并在后台线程上获取结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22112700/

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