gpt4 book ai didi

ios - Swift:如何查找 Realm 数据库包含自定义字符串

转载 作者:行者123 更新时间:2023-11-29 05:29:13 25 4
gpt4 key购买 nike

我在过滤 Realm 数据库时遇到问题。我搜索电影名称并将值从 Json 写入 Realm 数据库。写入后,我分配给表格 View 单元格来显示结果。在第二次搜索时,由于从数据库获取所有结果,我总是得到相同的值。我需要从数据库中过滤新值并将其设置为 TableView 。请帮助我!

func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
self.counter = 0
aranacak_kelime = searchBar.text!
let url = URL(string: "https://www.omdbapi.com/?s=" + aranacak_kelime + "&apikey=c6e----")
let task = URLSession.shared.dataTask(with: url!) { (data, response, error) in
if(error != nil)
{
print("error")
}
else{
if let content=data
{
do
{
let json = try JSONSerialization.jsonObject(with: content, options: JSONSerialization.ReadingOptions.mutableLeaves) as AnyObject
if let search = json["Search"] as? [NSDictionary]
{
DispatchQueue(label: "background").async {
autoreleasepool {
let realm = try! Realm()
print(Realm.Configuration.defaultConfiguration.fileURL)
for result in search
{
let movie = Movie()
movie.name = result["Title"] as! String
movie.type = result["Type"] as! String
movie.year = result["Year"] as! String
movie.poster = result["Poster"] as! String

try! realm.write {
realm.add(movie)
}
self.counter += 1
DispatchQueue.main.async {self.tableView.reloadData()}
}
}
}
}
}
catch{
print("error in JSONSerialization")
}
}
}}task.resume()}

和桌面 View

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "textCell", for: indexPath) as! TableViewCell
let row = indexPath.row
let realm = try! Realm()

//let results = realm.objects(Movie.self).filter("ANY name.contains('aranacak_kelime')")

let results = realm.objects(Movie.self)
cell.movieName.text = results[row].name
cell.movieYear.text = results[row].year
cell.movieType.text = results[row].type
let imageUrl = results[row].poster
}

和我的电影课

class Movie: Object{
@objc dynamic var name:String = ""
@objc dynamic var type:String = ""
@objc dynamic var year:String = ""
@objc dynamic var poster:String = ""
}

最佳答案

据我了解,您有几个问题。如果您搜索同一部电影两次,您将把相同的结果保存到您的 Realm 数据库中。因此,也许可以使用某种 ID,并在保存时使用 realm.add(movie, update: true)这将防止同一部电影存储两次。另一个问题是您没有过滤在表格 View 上加载的结果。

您应该有一个辅助方法,可以在重新加载表格 View 之前使用搜索栏文本来过滤结果,例如:

func reloadContent() {
self.data = realm.objects(Movie.self).filter("ANY name.contains(YOUR_SEARCHBAR.text)")
self.tableView.reloadData()
}

您应该更改此行 DispatchQueue.main.async {self.tableView.reloadData()}对于 DispatchQueue.main.async {self.reloadContent()}

最后有一个属性var data: Results<Movie>?您将在其中存储过滤后的电影。您必须更改 TableView 数据源委托(delegate)方法才能使用此数据。

希望有帮助。

关于ios - Swift:如何查找 Realm 数据库包含自定义字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57823904/

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