Ich versuche, eine Schaltfläche zu entwerfen, mit der Benutzer eine Auflistung in einer Sammlungsansichtstabelle "speichern" können. Wenn die Schaltfläche berührt wird, werden die Daten der Liste in Realm gespeichert, und ein anderer View-Controller präsentiert diese Daten.RealmSwift "Objekt wurde gelöscht oder ungültig gemacht"
Während ich in der Lage bin, die Daten auf Realm zu erhalten und zu zeigen und zu entfernen, wenn ich die Schaltfläche erneut antippen, wenn ich es das dritte Mal antippen, bekomme ich "Objekt wurde gelöscht oder ungültig gemacht", auch wenn es ein andere Auflistung. Hier ist der Code einen kleinen Einblick in das, was ich versuche zu tun:
let lib = BookCollection()
let realm = try! Realm()
var unSavedBook = RealmBook()
func save(_ cell: HomeBookPreviewViewCell) {
// This allows me to get the indexpath of a cell to use buttons on the collection view.
guard let indexPath = self.bookListing.indexPath(for: cell) else {
print("whaaaaaaa")
return
}
if lib.Library[indexPath.item].saved {
let savedBooks = realm.object(ofType: RealmBook.self, forPrimaryKey: lib.Library[indexPath.item].isbn!)
try! realm.write {
realm.delete(savedBooks!)
//updates other view controller
NotificationCenter.default.post(name: .reload, object: nil)
}
cell.saveButton.setImage(#imageLiteral(resourceName: "Star"), for: .normal)
lib.Library[indexPath.item].saveBook(save: false)
}
else if (!lib.Library[indexPath.item].saved) {
try! realm.write {
//unSavedBooks is declared outside of function.
//lib.Libary is an object that holds an array of Book objects with book attributes.
unSavedBook.addRealmBook(lib.Library[indexPath.item].title!, lib.Library[indexPath.item].author!, lib.Library[indexPath.item].edition!, lib.Library[indexPath.item].publisher!, "\(lib.Library[indexPath.item].type!)", "\(lib.Library[indexPath.item].condition!)", "\(lib.Library[indexPath.item].subject!)", lib.Library[indexPath.item].seller!, RealmOptional<Float>(lib.Library[indexPath.item].price), lib.Library[indexPath.item].isbn!)
realm.add(unSavedBook)
//updates other view controller
NotificationCenter.default.post(name: .reload, object: nil)
}
cell.saveButton.setImage(#imageLiteral(resourceName: "Star-Saved"), for: .normal)
lib.Library[indexPath.item].saveBook(save: true)
}
print("Button tapped on row \(indexPath.item)")
}
Ich verstehe, dass ich die Datenlast in mit dem gespeicherten boolean beharrte machen müssen, aber ich verstehe nicht, warum sie gewonnen‘ t erlauben Sie mir, zum dritten Mal zu klicken.
Können Sie mehr Code posten? denn ich bin ein bisschen verwirrt mit mehreren var wie 'lib.Library [indexPath.item] .saved'. etc btw, können Sie ein paar Screenshots posten, wäre schön, eine klare Idee zu haben –
@PangHoMing Edited es, um es ein wenig klarer zu machen, sorry für den chaotischen Code (ich beabsichtige, es später zu löschen, da gibt es eine andere Komponente, die ich hinzufügen muss .) –