如何从 table 视图控制器中的领域数据库中删除对象
How to delete object from realm database in table view controller
如果这是我的代码,那么为什么我会收到错误:'RLMResults' 类型的值没有成员 'arraySortedByProperty' 当我使用领域表示数据时。
var items = [NSManagedObject]()
var todos: RLMResults {
get {
return ToDoItem.allObjects()
}
}
override func viewDidLoad() {
super.viewDidLoad()
title = "Todos"
}
func deleteRowAtIndexPath(indexPath: NSIndexPath)
{
let realm = RLMRealm.defaultRealm() //1
let objectToDelete = todos[UInt(indexPath.row)] as! ToDoItem //2
realm.beginWriteTransaction() //3
realm.deleteObject(objectToDelete) //4
realm.commitWriteTransaction() //5
todos = ToDoItem.allObjects().arraySortedByProperty("name", ascending: true) //6
tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade) //7
}
待办事项 属性 是一个只能获取的 属性,因此您不能将其分配给任何值。而且你还需要在 allObjects() 返回的任何类型上实现你自己的 'arraySortedByProperty' 或者只调用 sort()
var todos: RLMResults {
get {
return ToDoItem.allObjects()
}
set { todos = newValue }
}
//assuming return value of allObjects has a property called name
todos = ToDoItem.allObjects().sort { [=10=].name < .name }
arraySortedByProperty:ascending:
随着 Realm Objective-C 0.87 的发布而重命名为 sortedResultsUsingProperty:ascending:
。
我认为你不需要这一行:
todos = ToDoItem.allObjects().arraySortedByProperty("name", ascending: true) //6
如果你想从 Relam 数据库中删除任何对象。只需删除该行,您的代码将是:
func deleteRowAtIndexPath(indexPath: NSIndexPath)
{
let realm = RLMRealm.defaultRealm() //1
let objectToDelete = todos[UInt(indexPath.row)] as! ToDoItem //2
realm.beginWriteTransaction() //3
realm.deleteObject(objectToDelete) //4
realm.commitWriteTransaction() //5
tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade) //7
}
你可以这样调用这个方法:
override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
if editingStyle == UITableViewCellEditingStyle.Delete {
deleteRowAtIndexPath(indexPath)
}
}
如果这是我的代码,那么为什么我会收到错误:'RLMResults' 类型的值没有成员 'arraySortedByProperty' 当我使用领域表示数据时。
var items = [NSManagedObject]()
var todos: RLMResults {
get {
return ToDoItem.allObjects()
}
}
override func viewDidLoad() {
super.viewDidLoad()
title = "Todos"
}
func deleteRowAtIndexPath(indexPath: NSIndexPath)
{
let realm = RLMRealm.defaultRealm() //1
let objectToDelete = todos[UInt(indexPath.row)] as! ToDoItem //2
realm.beginWriteTransaction() //3
realm.deleteObject(objectToDelete) //4
realm.commitWriteTransaction() //5
todos = ToDoItem.allObjects().arraySortedByProperty("name", ascending: true) //6
tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade) //7
}
待办事项 属性 是一个只能获取的 属性,因此您不能将其分配给任何值。而且你还需要在 allObjects() 返回的任何类型上实现你自己的 'arraySortedByProperty' 或者只调用 sort()
var todos: RLMResults {
get {
return ToDoItem.allObjects()
}
set { todos = newValue }
}
//assuming return value of allObjects has a property called name
todos = ToDoItem.allObjects().sort { [=10=].name < .name }
arraySortedByProperty:ascending:
随着 Realm Objective-C 0.87 的发布而重命名为 sortedResultsUsingProperty:ascending:
。
我认为你不需要这一行:
todos = ToDoItem.allObjects().arraySortedByProperty("name", ascending: true) //6
如果你想从 Relam 数据库中删除任何对象。只需删除该行,您的代码将是:
func deleteRowAtIndexPath(indexPath: NSIndexPath)
{
let realm = RLMRealm.defaultRealm() //1
let objectToDelete = todos[UInt(indexPath.row)] as! ToDoItem //2
realm.beginWriteTransaction() //3
realm.deleteObject(objectToDelete) //4
realm.commitWriteTransaction() //5
tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade) //7
}
你可以这样调用这个方法:
override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
if editingStyle == UITableViewCellEditingStyle.Delete {
deleteRowAtIndexPath(indexPath)
}
}