Domanda

C'è un modo migliore di quello che è qui proposto per creare un mapping uno-a-uno tra NSIndexPath di una cella di vista tabella e un NSUInteger unico o int, al fine di creare un valore di proprietà tag univoco per un widget nella cella (un UIProgressView)?

Il collegamento aggiunge metodi attraverso una categoria di estensione UIKit che converte tra NSIndexPath e int, ma funzionano solo per meno di un certo numero di righe.

Certo, non posso correre in quel limite, ma mi chiedo se c'è una mappatura che qualcuno ha messo a punto che può essere garantito per funzionare per qualsiasi numero di righe.

È stato utile?

Soluzione

No, in realtà non c'è un modo che è garantito per funzionare per qualsiasi numero di righe. Se si dispone di un tavolo con 2 sezioni, ciascuna con 3 miliardi di righe, quindi non c'è modo di mappare i 6 miliardi di potenziali NSIndexPaths nelle 4 miliardi NSIntegers a 32 bit.

(se si stesse costruendo un 64-bit app, la stessa cosa che è vero, ma i numeri avrebbe dovuto essere un altro 4 miliardi di volte più grande nell'esempio.)

Essi utilizzano un limite di 10.000 righe per sezione nell'esempio si è collegato al; se siete seriamente preoccupato si potrebbe avere più righe di questo, si potrebbe usare una costante più grande, vale a dire si potrebbe usare 1.000.000 il numero massimo di righe se sai che non avrà più di 4.000 sezioni.

Si noti che un "vero e proprio programmatore" presumibilmente utilizzare 65536 come la costante, ovviamente.

Altri suggerimenti

Se avevo bisogno di fare questo avrei semplicemente spostare il percorso sezione a metà di un 32-bit int, e spostare la parte fila all'altro. Sì, questo significa che non si può avere più di 65535 elementi di fila (in rottura fuori ho assunto unsigned int poiché fila / sezione sarà mai essere negativo), ma mi prendo un limite assunto molto più grande di quanto io sia mai bisogno, nel corso una magia costante in qualsiasi giorno.

In più è computazionalmente più conveniente.

Di solito in questa situazione se ho impostato il mio controller di vista tabella come un delegato per ogni cella, e la cellula in grado di richiamare il controller con le eventuali modifiche insieme a qualche valore chiave utilizzata per creare la cellula - dopo tutto, quando si popolano una cella si sa come raggiungere nel set di dati per estrarre i valori. Heck, si potrebbe anche semplicemente memorizzare l'IndexPath nella cella ed è possibile richiamare con quello. Il motivo per cui non vorrei usare l'approccio IndexPath o la prima che coinvolge uno appiattimento NSIndexPath in un tag è che se mai iniziare a cambiare le righe in modo dinamico i valori potrebbero diventare non allineato tra la NSndexPath si è creato una cella con e il valore per il set di dati corrente. Molto meglio avere un qualche tipo di chiave che sarà sempre farti tornare ai dati giusti logico.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top