Amo Dwifft, ma mi piacerebbe molto di più usarlo con ReactiveCocoa per ridurre ulteriormente la complessità del codice nei miei controller di vista collezione.Dwifft & ReactiveCocoa
Attualmente, ho una classe di supporto che accetta un'istanza di SignalProducer<[[T]]>
dove T: Equatable
(quindi funziona con la differenza). Ogni volta che il produttore del segnale emette un nuovo valore:
self.data.producer.observeOn(UIScheduler()).on(next: { [unowned self] in
guard let collectionView = self.collectionView else { return }
for (index, element) in $0.enumerate() {
if index == self.diffCalculators.count {
let calculator = CollectionViewDiffCalculator<T>(collectionView: collectionView, initialRows: element)
calculator.sectionIndex = index
self.diffCalculators.append(calculator)
} else {
let calculator = self.diffCalculators[index]
calculator.rows = element
}
for index in self.data.value.count..<(self.diffCalculators.count >= self.data.value.count ? self.diffCalculators.count : self.data.value.count) {
self.diffCalculators.removeAtIndex(index)
}
}
})
.takeUntil(self.willDeallocSignal())
.start()
Qui, durante l'enumerazione attraverso la mia matrice 2D, se un calcolatore diff non esiste ancora, si è creato e ha aggiunto al mio array di storage, diffCalculators
. Se esiste, viene impostata la proprietà rows
. Successivamente, eseguo il loop delle sezioni rimanenti e rimuoverle.
Sfortunatamente, sono stato incredibilmente infruttuoso nel farlo funzionare. Di volta in volta ottengo un numero The number of sections contained in the collection view after the update (1) must be equal to the number of sections contained in the collection view before the update (0), plus or minus the number of sections inserted or deleted (0 inserted, 0 deleted).'
e non riesco a capire se è nella mia logica o se sto usando Dwifft in modo errato.
Qualche suggerimento?
Bounty edit:
Per riferimento, ecco la classe di supporto che ho costruito per legare insieme viste di raccolta con reattiva dati cacao: https://gist.github.com/startupthekid/b3a69363d83e2279da0d750959c5a930
cosa ho bisogno è un modo per produrre e modificare CollectionViewDiffCalculators
in un reattivo, al sicuro. Attualmente si verificano arresti anomali degli effetti collaterali a seconda di quanto rapidamente ricevo nuovi dati (viene calcolato un diff, i dati arrivano e la vista della raccolta tenta di ricaricarla contemporaneamente).
Ciò si verifica a causa di un inserimento o eliminazione di incoerenza nella struttura dati che popola la vista raccolta. l'hai debugato? – Harris
Sì, l'ho fatto, il problema non era nella mia struttura dati, posterò una risposta e spiegherò cosa stava succedendo. – barndog