2016-03-22 3 views
0

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 :

+0

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. –

+0

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

+0

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. –

Antwort

0

Sie können auch Ihr Array konvertieren (NSSet), und Ihr Array wird sofort frei von Duplikaten sein. Sehen Sie diesen Beitrag: Set operations (union, intersection) on Swift array?

+0

Haben Sie NSSet nicht verwendet, wie würde es Duplikate löschen? – SwiftyJD

+0

Sets erlauben keine Duplikate und die Duplikate werden automatisch entfernt. Sie müssen daran denken, den Satz wieder in ein Array zu verwandeln. Alles erklärt im Link. –

Verwandte Themen