2017-05-08 4 views
1

Ich habe eine collectionView, die Daten aus einem Netzwerk zieht, dann löscht der Benutzer ein Objekt und ich möchte die verbleibenden Objekte anzeigen. Aufgrund vergangener Alpträume mit dem Entfernen von Objekten im Index und dem Jonglieren meiner lokalen Daten mit der Netzwerkversion bin ich damit einverstanden, nur einen neuen Aufruf zu machen, um die neuen Netzwerkdaten zu erhalten (weniger das gelöschte Objekt), da es nicht so viel ist. Was ist der beste Ansatz für die Anzeige der neuen Daten in einem noch vorhandenen collectionView? Ich möchte die collectionView (mit den alten Daten) rauswerfen und eine neue hinzufügen, aber es gibt keine solche Methode, um so etwas zu tun? Oder aktualisieren Sie einfach die gesamte collectionViewController? Der Versuch, den bevorzugten Ansatz, um herauszufinden, hier anstelle eines Hack =)Erneutes Laden eines CollectionViewControllers nach dem Löschen eines Objekts?

func getPinsCheckLinksAndStartLoadAnimation() { 

     PinterestRequest().getPinterstPins(board: board) { (result) in 

      LinkCheck().checkLinks(pins: result, handler: { (testPinsWithBrokenLinks, error) in 

       self.pinsWithBrokenLinks = testPinsWithBrokenLinks 
      }) 

      self.startAnimating(self.view.frame.size, message: "Checking Pins...", messageFont: UIFont.boldSystemFont(ofSize: 16), type: .ballScaleMultiple, color: UIColor.red, padding: CGFloat(0), displayTimeThreshold: nil, minimumDisplayTime: nil, backgroundColor: UIColor.clear, textColor: UIColor.black) //see https://github.com/ninjaprox/NVActivityIndicatorView#defaults 
     } 

    } 
+0

Ich lade nur die Sammlung mit den aktualisierten Daten neu. – toddg

+0

Das einzige Problem dabei ist, dass ich eine Lade-Animation verwende, die dann über die alten collectionView-Zellen angezeigt wird, bis sie neu geladen wird. – GarySabo

+0

Sie meinen wie ein 'UIRefreshControl'? Poste etwas von deinem Code, damit ich eine bessere Idee bekommen kann. – toddg

Antwort

1

Ich denke, wenn Sie die Zelle mit dem Index, dann Ihre beste Wette ist zu tun, nicht über eine lokale Version synchron halten wollen und löschen collectionView.reloadData().

Der beste Weg und die Art, wie ich es mache, ist mit Realm. Welches ist eine lokale Datenbank, die ich mit Firebase oder meinem eigenen Server synchronisiert habe. Es kümmert sich darum, Zellen am Index zu löschen, indem das Objekt nur lokal gelöscht wird und Sie dann das Objekt auf Ihrem Server mit einem API-Aufruf löschen können.

Aber ansonsten müssen Sie nur die gesamte CollectionView neu laden.

Verwandte Themen