I am writing Todo app. My app is simple. I have two pages. One page for showing tasks in table view. And one page for adding new tasks. In this page I post to server and then in main page I get data from server and then save it in realm database.
When I Want to delete them in my main page , my app crashes by this error.
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[TodoApp.TodosTableViewController delete:]: unrecognized selector sent to instance 0x7fca7b40b4c0
Anyone knows why? It is my deleting function :
public func delete<T:Object>(_ model: T) {
let realm = try! Realm()
try! realm.write {
realm.delete(model)
}
}
And this is the place that I use this function to delete from database :
override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath){
if editingStyle == UITableViewCellEditingStyle.delete {
rowHere = indexPath.row
// it crashes the app when I want to delete from database
// delete(self.todos[self.rowHere!])
self.todos.remove(at: indexPath.row)
tableView.deleteRows(at: [indexPath as IndexPath], with: UITableViewRowAnimation.automatic)
}
}
I implemented something similar in my app, hope it helps you.
func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
//deleteRecords()
delete(index: indexPath.row)
retrieveFoods()
tableView.reloadData()
}
func retrieveFoods() {
let realm = try! Realm()
myFoodsArray = realm.objects(MyFoods.self).sorted(byKeyPath: "name", ascending: true)
}
func delete(index: Int) {
let myFood = myFoodsArray[index]
let realm = try! Realm()
try! realm.write {
realm.delete(myFood)
self.tableView.reloadData()
}
}
First get Object model in viewDidLoad()
var DatabaseModel: Results<ObjectClassRealm>!
override func viewDidLoad() {
super.viewDidLoad()
let realm = RealmService.shared.realm
DatabaseModel = realm.objects(ObjectClassRealm.self)
}
func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
guard editingStyle == .delete else { return }
let objectData = DatabaseModel[indexPath.row]
RealmService.shared.delete(objectData)
}
Or you can delete on button click
@IBAction func DeleteData(_ sender: Any) {
let realm = try! Realm()
let deleteData = realm.object(ofType: ObjectClassRealm.self,
forPrimaryKey: PRIMARYKEY)
if deleteData == nil {
print("No data in DB")
} else {
RealmService.shared.delete(deleteData!)
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With