swift 只能从对象所属的领域中删除对象

mfpqipee  于 2023-03-28  发布在  Swift
关注(0)|答案(3)|浏览(105)

我得到这个错误“只能删除一个对象从领域它属于”每次我试图删除一个对象从领域对我的tableview.这里是相关的代码:

let realm = try! Realm()
var checklists = [ChecklistDataModel]()

override func viewWillAppear(_ animated: Bool) {

    checklists = []
    let getChecklists = realm.objects(ChecklistDataModel.self)

    for item in getChecklists{

        let newChecklist = ChecklistDataModel()
        newChecklist.name = item.name
        newChecklist.note = item.note

        checklists.append(newChecklist)
    }

    tableView.reloadData()

}

override func numberOfSections(in tableView: UITableView) -> Int {
    return 1
}

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return checklists.count
}

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "ChecklistCell", for: indexPath) as! ListsTableViewCell

    cell.name.text = checklists[indexPath.row].name
    return cell
}

override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
    if editingStyle == .delete {

        // Delete the row from the data source
        try! realm.write {
            realm.delete(checklists[indexPath.row])
        }

        //delete locally
        checklists.remove(at: indexPath.row)

        self.tableView.deleteRows(at: [indexPath], with: .fade)
    }
}

我知道这一部分要具体说明:

// Delete the row from the data source
        try! realm.write {
            realm.delete(checklists[indexPath.row])
        }

有什么想法是怎么回事?提前感谢!

j8yoct9x

j8yoct9x1#

您正在尝试删除存储在集合中的Realm对象的副本,而不是存储在Realm中的实际Realm对象。

try! realm.write {
    realm.delete(Realm.objects(ChecklistDataModel.self).filter("name=%@",checklists[indexPath.row].name))
}

如果没有CheklistDataModel的定义,我不确定我是否正确理解了NSPerdicate,但是您应该能够从这里弄清楚。

0x6upsns

0x6upsns2#

从您共享的代码片段来看,您似乎正在创建新的ChecklistDataModel对象,但从未将它们添加到任何Realm中。然后您尝试从您的try! realm.write块中的Realm中删除这些对象。
简单地示例化一个对象并不意味着它已经被添加到一个领域;在通过成功的write事务将其添加到Realm之前,它的行为就像任何其他Swift示例一样。只有在将对象添加到Realm之后,您才能成功地将其从同一Realm中删除。

pbgvytdp

pbgvytdp3#

after delete last Object check fetch data in View   

  // fetched data
    func fetchData()  {
        let realm = try! Realm()
        let entrys = realm.objects(Entry.self)
        // displying result ...
        if(!entrys.isEmpty){
            self.entries.removeAll()
            for n in entrys{
                self.entries.append(n)
            }
        }else{
            self.entries.removeAll()
            for n in entrys{
                self.entries.append(n)
            }
        }
    }

相关问题