从Realm
到UITableView
删除对象的最常用方式(代码结构)是什么?
以下代码可以很好地显示UITableView中来自Realm
的数据,但是如果我需要删除行并更新Realm
则不会,因为Results
没有remove
方法。
我是否需要将对象放入List
并通过它进行删除?如果这是最常用的方法,我不太确定如何保持'列表'和来自Results
的{{1}}保持同步。
Realm
import RealmSwift
class Item:Object {
dynamic var productName = ""
}
从let realm = try! Realm()
var items : Results<Item>?
var item:Item?
override func viewDidLoad() {
super.viewDidLoad()
self.items = realm.objects(Item.self)
}
func addNewItem(){
item = Item(value: ["productName": productNameField.text!])
// Save to Realm
try! realm.write {
realm.add(item!)
}
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.items!.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "reusableCell", for: indexPath)
let data = self.items![indexPath.row]
cell.textLabel?.text = data.productName
return cell
}
中删除行的标准方法,因为我使用了Realm中的默认UITableView
容器,因此在这种情况下无效。
Results
同样,从func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
if editingStyle == UITableViewCellEditingStyle.delete{
items!.remove(at: indexPath.row)
tableView.deleteRows(at: [indexPath], with: UITableViewRowAnimation.automatic)
}
}
到Realm
删除对象的最常用方法是什么?
由于
答案 0 :(得分:1)
为简洁而遗漏了一些解缠和捕捉逻辑
func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
if editingStyle == UITableViewCellEditingStyle.delete{
if let item = items?[indexPath.row] {
try! realm.write {
realm.delete(item)
}
tableView.deleteRows(at: [indexPath], with: UITableViewRowAnimation.automatic)
}
}
}
答案 1 :(得分:0)
您还可以实现此块:
if let item = items?[indexPath.row] {
do {
try realm.write {
realm.delete(item)
}
} catch {
print("Error deleting item, \(error)")
}
tableView.reloadData()
}