Question

Y at-il une meilleure façon que ce qui est proposé ici pour créer un à un entre la NSIndexPath d'une vue cellule de tableau et un NSUInteger unique, ou int, afin de créer une valeur de propriété de tag unique pour un widget dans la cellule (un UIProgressView)?

Le lien ajoute des méthodes par une extension de la catégorie UIKit qui convertit entre NSIndexPath et int, mais ils ne fonctionnent que pour moins d'un certain nombre de lignes.

D'accord, je ne peux pas courir dans cette limite, mais je me demande s'il y a une cartographie que quelqu'un est venu avec qui peut être garanti à travailler pour un certain nombre de lignes.

Était-ce utile?

La solution

Non, il n'y a vraiment pas une façon qui est garanti à travailler pour un certain nombre de lignes. Si vous avez une table avec 2 sections, chacune avec 3 milliards de lignes, alors il n'y a aucun moyen de cartographier ces 6 milliards NSIndexPaths potentiels dans les 4 milliards NSIntegers 32 bits.

(si vous construisiez une application 64 bits, la même chose est vrai, mais le nombre devrait être encore 4 milliards de fois plus dans l'exemple).

Ils utilisent une limite de 10.000 lignes par section dans l'exemple que vous avez lié à; si vous êtes inquiet, vous pourriez sérieusement avoir plus de lignes que cela, vous pouvez utiliser une plus grande constante, à savoir que vous pouvez utiliser 1.000.000 le nombre maximum de lignes si vous savez que vous ne serez pas avoir plus de 4000 sections.

Notez que serait probablement « vrai programmeur » utiliser 65536 comme la constante, bien sûr.

Autres conseils

Si j'avais besoin de faire cela, je voudrais simplement passer le chemin de la section à la moitié d'un int 32 bits, et déplacer la partie de la ligne à l'autre. Oui, cela signifie que vous ne pouvez pas avoir plus de 65535 éléments dans une rangée (en brisant dehors je supposais ints non signés depuis la ligne / section ne sera jamais négatif) mais je vais prendre une limite supposée beaucoup plus grand que je jamais besoin, plus une magie toute jour constante.

De plus, il est moins cher informatiquement.

En général, dans cette situation si je mets mon contrôleur de vue de la table en tant que délégué pour chaque cellule, et la cellule peut rappeler le contrôleur avec les modifications ainsi une valeur clé utilisée pour créer la cellule - après tout quand vous peuplez une cellule vous savez comment atteindre dans votre ensemble de données pour tirer des valeurs. Heck, vous pouvez même simplement stocker le indexPath dans la cellule et il peut rappeler avec cela. La raison pour laquelle je ne voudrais pas utiliser l'approche indexPath ou une avant impliquant aplatissement NSIndexPath dans une balise est que si jamais vous commencez à changer les lignes dynamiquement les valeurs pourraient devenir non alignés entre la NSndexPath que vous avez créé une cellule et la valeur de l'ensemble de données en cours. Beaucoup mieux d'avoir une sorte de clé qui sera toujours vous revenir aux bonnes données logiquement.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top