2015-07-18 10 views
5

Ich versuche Artikel aus Kollektion in alertWie lösche ich ein Objekt aus der Sammlungsansicht?

ich folgenden Code

func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) { 
    let person = people[indexPath.item] 

    let questionController = UIAlertController(title: "What u wanna do?", message: nil, preferredStyle: .Alert) 
    questionController.addAction(UIAlertAction(title: "Rename person", style: .Default, handler: { 

     (action:UIAlertAction!) -> Void in 

     let ac = UIAlertController(title: "Rename person", message: nil, preferredStyle: .Alert) 
     ac.addTextFieldWithConfigurationHandler(nil) 

     ac.addAction(UIAlertAction(title: "Cancel", style: .Cancel, handler: nil)) 
     ac.addAction(UIAlertAction(title: "OK", style: .Default) { [unowned self, ac] _ in 
      let newName = ac.textFields![0] as! UITextField 
      person.name = newName.text 

      self.collectionView.reloadData() }) 

     self.presentViewController(ac, animated: true, completion: nil) 

    })) 

    questionController.addAction(UIAlertAction(title: "Delete Person", style: .Default, handler: { 

     (action:UIAlertAction!) -> Void in 

     println("hello world") 
     self.collectionView.deleteItemsAtIndexPaths([indexPath.item]) 
     self.collectionView.reloadData() 

    })) 

    presentViewController(questionController, animated: true, completion: nil) 
} 

Hallo Welt arbeitet Abstürze in Ordnung und App haben

basierend auf Benutzer Wahl zu entfernen, wenn i Person Ausgang

Konsole drücken löschen ist

hello world 
2015-07-18 13:40:14.628 Project10[15888:1274436] -[__NSCFNumber section]:   unrecognized selector sent to instance 0xb000000000000003 
2015-07-18 13:40:14.636 Project10[15888:1274436] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFNumber section]: unrecognized selector sent to instance 0xb000000000000003' 

, was mache ich falsch? , Nicht eine Reihe von Zahlen

Antwort

7

sollten Sie

ändern
self.collectionView.deleteItemsAtIndexPaths([indexPath.item]) 

zu

self.collectionView.deleteItemsAtIndexPaths([indexPath]) 

deleteItemsAtIndexPaths ein Array von NSIndexPath s erwartet.

Außerdem, wenn Sie deleteItemsAtIndexPaths anrufen, brauchen Sie keinen Anruf an reloadData - dies wird sogar verhindern, dass jede Animation passiert.

Vergessen Sie nicht, Ihre Datenquelle zu aktualisieren - die Person muss aus dem Array people entfernt werden.

people.removeAtIndex(indexPath.item) 

dies tun vordeleteItemsAtIndexPaths aufrufen.

+1

hat nicht geholfen Beenden App aufgrund der nicht abgefangenen Ausnahme 'NSInternalInconsistencyException', Grund: 'Ungültige Aktualisierung: ungültige Anzahl der Elemente in Abschnitt 0. Die Anzahl der Elemente in einem vorhandenen Abschnitt nach dem Update (1) muss gleich sein Anzahl der in diesem Abschnitt enthaltenen Elemente vor der Aktualisierung (1), plus oder minus der Anzahl der in diesen Abschnitt eingefügten oder gelöschten Elemente (0 eingefügt, 1 gelöscht) und plus oder minus der Anzahl der Elemente, die in diesen Abschnitt oder aus diesem Abschnitt verschoben wurden (0 eingezogen, 0 ausgezogen). " –

+0

Vergessen Sie nicht, Ihre Datenquelle zu aktualisieren - die Person muss aus dem 'people'-Array entfernt werden. – Glorfindel

+0

Entschuldigung, ich bin neu in swift - Wie aktualisiert man die Datenquelle? –