如何使用UITableView - Swift从Realm中删除对象

时间:2017-04-17 12:45:13

标签: ios swift uitableview realm

RealmUITableView删除对象的最常用方式(代码结构)是什么?

以下代码可以很好地显示UITableView中来自Realm的数据,但是如果我需要删除行并更新Realm则不会,因为Results没有remove方法。

我是否需要将对象放入List并通过它进行删除?如果这是最常用的方法,我不太确定如何保持'列表'和来自Results的{​​{1}}保持同步。

模型类

Realm

主ViewController

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删除对象的最常用方法是什么?

由于

2 个答案:

答案 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()
            }