gpt4 book ai didi

swift - 使用异步搜索结果重新加载表

转载 作者:搜寻专家 更新时间:2023-11-01 06:58:23 26 4
gpt4 key购买 nike

我的应用程序中有大量数据,具有搜索功能。我正在使用 SQLite 和核心数据来搜索和获取数据。

这是我的搜索功能,

func fetchSearchResultsWith(_ searchText : String?){

DispatchQueue.global(qos: .background).async {
var resArr : [Int64] = []
let stmt = "SELECT rowid FROM htmlText_fts WHERE htmlText MATCH '\(searchText!)*'"
do {
let res = try self.db.run(stmt)
for row in res {
resArr.append(row[0] as! Int64)
}
} catch {
print(error.localizedDescription)
}

let request : NSFetchRequest<Monos> = Monos.fetchRequest()
request.fetchLimit = 200
let predicate = NSPredicate(format: "id in %@", resArr)
request.predicate = predicate
var arr : [Items]? = []
do {
arr = try context.fetch(request)
} catch {
print(error.localizedDescription)
}

DispatchQueue.main.async(execute: {
self.monosSearchResult = arr
self.tableView.reloadData()
})
}
}

我正在使用 DispatchQueue.global.async 来避免卡住 UI,但随后它返回异步数组,我的 TableView 最终以错误的结果重新加载。如果我使用 DispatchQueue.global.sync 它工作正常,但是当我输入 searchBar 时我的 UI 会卡住。我不确定我能做什么才能得到正确的结果。任何帮助将不胜感激!

如果您需要任何进一步的信息,请告诉我。

最佳答案

因为你有一个两步搜索机制,一个新的搜索可能会在其他搜索结束之前启动,所以为了轻量这个操作,将文本字段的最后一个值存储在一个 var 中

lastSear = textfield.text
fetchSearchResultsWith(lastSear)

然后在搜索功能中的 3 个地方执行此操作

搜索数据库之前&之后&设置数组和重新加载表之前

if searchText != lastSear { return }

关于swift - 使用异步搜索结果重新加载表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52065644/

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