Pregunta

¿Hay una manera mejor que lo que es aquí se propone para crear una correlación de uno a uno entre NSIndexPath una vista de celda de la tabla y una NSUInteger único o int, con el fin de crear un valor de propiedad tag único para un widget en la célula (un UIProgressView)?

El enlace añade métodos a través de una extensión de categoría UIKit que convierte entre NSIndexPath y int, pero sólo funcionan durante menos de un cierto número de filas.

Por supuesto, no puede funcionar en ese límite, pero me pregunto si hay un mapeo que alguien ha llegado con que se puede garantizar que funcionará para cualquier número de filas.

¿Fue útil?

Solución

No, en realidad no hay una manera que se garantiza que funcione para cualquier número de filas. Si usted tiene una mesa con 2 secciones, cada una con 3 mil millones de filas, entonces no hay manera de hacer corresponder los 6 mil millones de NSIndexPaths potenciales en los 4 mil millones de NSIntegers de 32 bits.

(si estuviera construyendo una aplicación de 64 bits, lo mismo es cierto, pero los números tendría que pasar otros 4 mil millones de veces más grande en el ejemplo).

Utilizan un límite de 10.000 filas por sección en el ejemplo se ha vinculado a; Si usted está seriamente preocupada que podría tener más filas que eso, usted podría utilizar una constante más grande, es decir, se puede usar 1.000.000 como el número máximo de filas si usted sabe que no tendrá más de 4.000 secciones.

Tenga en cuenta que un "programador real" sería presumiblemente utilizar 65536 como la constante, por supuesto.

Otros consejos

Si tuviera la necesidad de hacer esto yo simplemente cambiar la ruta de la sección a la mitad de un int de 32 bits, y cambiar la parte fila a la otra. Sí, esto significa que no puede tener más de 65.535 elementos en una fila (en romperlo a cabo asumí enteros sin signo desde la fila / sección nunca será negativo) pero voy a tener un límite asumido mucho más grande de lo que necesitará siempre, a lo largo una magia constante en cualquier momento.

Además de que es computacionalmente más barato.

Por lo general, en esta situación, aunque puedo configurar mi controlador de vista tabla como un delegado para cada celda, y la célula puede devolver la llamada al controlador con los cambios a lo largo con un poco de valor de la clave utilizada para crear la célula - después de todo, cuando están poblando una célula que saben cómo llegar en el conjunto de datos para extraer valores. Heck, incluso se podría almacenar simplemente el IndexPath en la célula y que puede volver a llamar con eso. La razón por la que no usaría el enfoque IndexPath o el aplanamiento anterior que implica NSIndexPath en una etiqueta es que si alguna vez empezar a cambiar filas dinámicamente los valores podrían llegar a ser no alineada entre el NSndexPath que ha creado una celda con el valor y para el conjunto de datos actual. Mucho mejor que tener algún tipo de clave que siempre se le devolverá a los datos correctos lógicamente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top