gpt4 book ai didi

ios - 在 TableView 的 realm 上显示 resultArray

转载 作者:行者123 更新时间:2023-11-28 07:50:34 25 4
gpt4 key购买 nike

我想实现一个反向查找的功能。如何通过 2 个不同的 UITextField 从 Realm 查询数据。

有一个名为 Items 的 Realm 类,它具有名为 ingredient1ingredient 6 的属性。我想根据 ingredientName1 过滤用户在 textField 上输入的内容到成分 6。如果用户输入的值与这些属性中的任何一个匹配,则应过滤变量项。

我的代码:

let realm = try! Realm()
var items : Results<Items>?

@IBOutlet weak var ingredient1: UITextField!
@IBOutlet weak var ingredient2: UITextField!
@IBOutlet weak var tableView: UITableView!

当用户完成输入并点击按钮时。我希望刷新 TableView 并将结果(在本例中为食谱)列在上面。

@IBAction func searchButton(_ sender: UIButton) {

tableView.reloadData()
}

func textFieldDidEndEditing(_ textField: UITextField) {

if (ingredient1.text != "" && ingredient2.text == "") {
items = items?.filter("ingredientName1 || ingredientName2 || ingredientName3 || ingredientName4 || ingredientName5 || ingredientName6 CONTAINS[cd] %@", ingredient1)
print(ingredient1.text!)


} else if (ingredient1.text == "" && ingredient2.text != "") {
print("Enter Ingredient on Ingredient1 first")

} else if (ingredient1.text != "" && ingredient2.text != "") {
items = items?.filter("ingredientName1 CONTAINS[cd] %@ || ingredientName2 CONTAINS[cd] %@ || ingredientName3 CONTAINS[cd] %@ || ingredientName4 CONTAINS[cd] %@ || ingredientName5 CONTAINS[cd] %@ || ingredientName6 CONTAINS[cd] %@", ingredient1.text!, ingredient2.text!)
print("\(ingredient1.text!) \(ingredient2.text!)")
}


}
func textFieldShouldReturn(_ textField: UITextField) -> Bool {

textField.resignFirstResponder()
return true
}


func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return items?.count ?? 1
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

let cell = tableView.dequeueReusableCell(withIdentifier: "searchedItemCell", for: indexPath)

cell.textLabel?.text = items?[indexPath.row].itemName ?? "No items Found"

return cell

}

这段代码不会抛出任何错误,但是当 textFieldDidEndEditing 被触发时,我得到的是应该有任何值的项目。然后 tableView 保持空白。

最佳答案

首先你需要像这样填充items数组:

items = realm.objects(Items.self)

viewDidLoad 中调用它。之后像这样更改您的过滤字符串:

let ingredient1Text = ingredient1.text ?? ""
items = items?.filter("ingredientName1 CONTAINS %@ ||
ingredientName2 CONTAINS %@ || ingredientName3 CONTAINS %@ ||
ingredientName4 CONTAINS %@ || ingredientName5 CONTAINS %@ ||
ingredientName6 CONTAINS %@", ingredient1Text, ingredient1Text,
ingredient1Text, ingredient1Text, ingredient1Text, ingredient1Text)

您必须传递与过滤字符串中的 %@ 值一样多的参数。

例如,如果你想按两个字符串进行过滤,你可以这样写:

let ingredient1Text = ingredient1.text ?? ""
let ingredient2Text = ingredient2.text ?? ""
cocktails = cocktails?
.filter("ingredientName1 CONTAINS %@ || ingredientName2 CONTAINS %@ || ingredientName3 CONTAINS %@ || ingredientName4 CONTAINS %@ || ingredientName5 CONTAINS %@ || ingredientName6 CONTAINS %@ || ingredientName1 CONTAINS %@ || ingredientName2 CONTAINS %@ || ingredientName3 CONTAINS %@ || ingredientName4 CONTAINS %@ || ingredientName5 CONTAINS %@ || ingredientName6 CONTAINS %@",
ingredient1Text, ingredient1Text, ingredient1Text, ingredient1Text, ingredient1Text, ingredient1Text, ingredient1Text,
ingredient2Text, ingredient2Text, ingredient2Text, ingredient2Text, ingredient2Text, ingredient2Text, ingredient2Text)

关于ios - 在 TableView 的 realm 上显示 resultArray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49794392/

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