Ich habe ein Array, das eine benutzerdefinierte Klasse speichert, die codiert wurde, so dass es in NSUserDefaults gespeichert werden kann. Es basiert auf TableView-Zellen mit einer Favoriten-Taste, jedes Mal, wenn die Favoritentaste gedrückt wird, wird es in einem lokalen Array gespeichert und dann in NSUserDefaults gespeichert. Wenn die Favoritentaste mehrfach gedrückt wird, werden mehrere Kopien dieser TabelleView-Zelle in NSUserDefaults gespeichert. Hier ist mein Code zum Speichern der Daten. Ich habe versucht, zu überprüfen, ob die „savedFavorite“ existiert bereits in der Anordnung, aber da es seinen einen anderen kodieren Wert jedes Mal codiert wurde, so dass es nicht wie ein Duplikat sieht:Wie können Sie in Swift Duplikate in einem codierten benutzerdefinierten Klassenarray erkennen?
let myDefaults = NSUserDefaults.standardUserDefaults()
let savedShow1 = "savedShow1"
var savedFavorite: TvShowInfo!
var savedFavoriteArray:[TvShowInfo] = []
@IBAction func saveShow(sender: UIButton) {
//accessing current point of tableView Cell
let location: CGPoint = sender.convertPoint(CGPointZero, toView: self.tvShowTableView)
let indexPath: NSIndexPath = self.tvShowTableView.indexPathForRowAtPoint(location)!
let searchTermsData = myDefaults.objectForKey(savedShow1) as? NSData
//accessing previously saved info so as not to overwrite it
if searchTermsData?.length > 0 {
let searchTermsArray = NSKeyedUnarchiver.unarchiveObjectWithData(searchTermsData!) as? [TvShowInfo]
self.savedFavoriteArray = searchTermsArray!
}
if searchBarActive {
savedFavorite = filteredShowSearchResults[indexPath.row]
} else {
savedFavorite = showArray[indexPath.row]
}
if savedFavoriteArray.contains(savedFavorite) {
print("Item already in array")
} else {
savedFavoriteArray.append(savedFavorite)
}
let savedData = NSKeyedArchiver.archivedDataWithRootObject(savedFavoriteArray)
myDefaults.setObject(savedData, forKey: savedShow1)
myDefaults.synchronize()
}
Hier ist meine eigene Klasse :
Ich denke, ein besserer Weg, dies zu tun ist, den Favoriten aus dem Array zu entfernen, wenn es "nicht favorisiert" ... dann finden Sie nur das eine Element in dem Array, das passt und entfernen Sie es. –
Das ist eine gute Idee, das Problem ist, wenn Sie die Favoritentaste mehrmals drücken, fügt es die Zellinformation in das Array, bevor es "nicht bevorzugt" werden kann. – SwiftyJD
Eine Möglichkeit besteht darin, eine Kopie des Array zu speichern, das nicht codiert ist. Dann kann einfach überprüft werden, ob es bereits ausgewählt wurde. –