[英]How to delete objects from Realm using UITableView - Swift
通过UITableView
从Realm
删除对象的最常见方法(代码结构)是什么?
以下代码可以很好地在UITableView中显示来自Realm
数据,但是如果我需要删除一行并更新Realm
,则不能使用,因为Results
不具有remove
方法。
我是否需要将对象放入List
并通过List
进行删除? 如果这是最常用的方法,那么我不确定如何使“列表”和Realm
的Results
保持恒定同步。
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
}
从UITableView
删除行的标准方法,在这种情况下当然不起作用,因为我使用的是Realm的默认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)
}
}
同样,通过UITableView
从Realm
删除对象的最常用方法是什么?
谢谢
为简洁起见,省略了一些展开和捕捉逻辑
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)
}
}
}
您还可以实现以下代码块:
if let item = items?[indexPath.row] {
do {
try realm.write {
realm.delete(item)
}
} catch {
print("Error deleting item, \(error)")
}
tableView.reloadData()
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.