Pergunta

Existe uma maneira melhor do que o que é aqui proposta para criar um mapeamento um-para-um entre NSIndexPath de uma célula de exibição de tabela e uma NSUInteger única ou int, a fim de criar um valor de propriedade tag única para um widget na célula (a UIProgressView)?

O link acrescenta métodos através de uma extensão de categoria UIKit que converte entre NSIndexPath e int, mas eles só trabalhar por menos do que um certo número de linhas.

Com certeza, eu não posso correr para esse limite, mas eu estou querendo saber se existe um mapeamento que alguém surgiu com que pode ser garantida a obra para qualquer número de linhas.

Foi útil?

Solução

Não, não há realmente uma maneira que seja garantida a obra para qualquer número de linhas. Se você tiver uma tabela com 2 secções, cada uma com 3 bilhões de linhas, então não há nenhuma maneira para mapear esses 6 bilhões de potenciais NSIndexPaths nos 4 bilhões NSIntegers de 32 bits.

(se você está construindo um aplicativo de 64 bits, a mesma coisa é verdade, mas os números teriam que ser mais 4 bilhões de vezes maiores no exemplo).

Eles usam um limite de 10.000 linhas por seção no exemplo que você ligados; Se você está preocupado seriamente que você pode ter mais linhas do que isso, você pode usar uma constante maior, ou seja, você poderia usar 1,000,000 como o número máximo de linhas se você sabe que não terá mais de 4.000 seções.

Note que um "programador real" presumivelmente usar 65536 como a constante, é claro.

Outras dicas

Se eu tivesse uma necessidade de fazer isso eu simplesmente mudar o caminho seção para uma metade de um 32-bit int, e mudar a parte de linha para a outra. Sim Isso significa que você não pode ter mais de 65535 elementos em uma fileira (em quebrá-lo fora eu assumi ints não assinados desde linha / seção nunca será negativo), mas eu vou tomar um limite assumida muito maior do que eu jamais terá, ao longo uma constante mágica qualquer dia.

Além disso, é mais barato computacionalmente.

Normalmente nesta situação que eu montar o meu controlador de vista da tabela como um delegado para cada célula e a célula pode chamar de volta o controlador com todas as mudanças, juntamente com algum valor chave usada para criar a célula - depois de tudo, quando você está preenchendo uma célula que você sabe como chegar em seu conjunto de dados para retirar valores. Heck, você pode até mesmo simplesmente armazenar o IndexPath para dentro da célula e pode chamar de volta com isso. A razão que eu não usaria a abordagem IndexPath ou o anterior envolvendo achatamento NSIndexPath em uma tag é que se você nunca começar a mudar linhas dinamicamente os valores podem se tornar desalinhadas entre o NSndexPath você criou uma célula com e o valor para o conjunto de dados atual. Muito melhor ter algum tipo de chave que irá sempre ter você de volta aos dados corretos logicamente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top