Pergunta

Na minha visualização de coleção preciso gerar um índice para cada item.À medida que os itens são reordenados, preciso que este índice seja atualizado com sua nova posição.

Os dados são entidades Core Data em um NSArrayController gerenciado.O mais próximo que cheguei de uma solução possível foi implementar esse método na classe de entidade e depois usar representadoObject.dynamicIndex para vinculá-lo à IU.

- (NSNumber *) dynamicIndex
{
    NSInteger r = [[[[self managedObjectContext] registeredObjects] allObjects] indexOfObject:self];
    NSNumber *result = [NSNumber numberWithInt:r];
    return result;
}

Esta solução é, na melhor das hipóteses, incompleta e não realmente funcional, pois não reflete necessariamente a ordem na visualização da coleção.

Alguém tem um modelo/mecanismo para gerar ou recuperar índices de itens em um NSCollectionView?

Foi útil?

Solução

Primeiro, certifique -se de entender a diferença entre (e use adequadamente a terminologia de) "entidade" e "instância". Faz toda a diferença na comunicação de seus problemas/soluções com outras pessoas.

Segundo:Não se preocupe com NSCollectionViewItems...preocupe-se com o “objeto representado” de cada um, que está contido em algum recipiente.

Terceiro:Você queria que a ordem de exibição fosse um atributo persistente da sua entidade ou só precisa saber em que posição o item está no momento, independente de qual possa ser posteriormente?Questão importante.

Quarto:Core Data não fornece o conceito de coleções ordenadas.Isso é para oferecer suporte a tipos de armazenamento como NSSQLiteStoreType, onde você pode querer falhar apenas em alguns itens (ou um) sem carregar a lista inteira.Portanto, você está por conta própria se quiser uma ordem de classificação persistente.Para fazer isso, basta adicionar um atributo à sua entidade chamado “sortOrder” e torná-lo um tipo numérico.

Quinto:Por causa do problema de "coleções sem ordem" acima, sua tentativa de encontrar o índice de uma determinada instância de sua entidade a partir de uma matriz, construída a partir de um conjunto, que sofreu falha com uma ordem não determinística está fadada ao fracasso.

Sexto:Como você está usando um controlador de array, precisará definir seus descritores de classificação.Você vai querer usar sua chave "sortOrder".Dessa forma, suas instâncias buscadas sempre serão mantidas classificadas por seu “sortOrder”.

Sétimo e último:Se você está tentando obter o índice de qualquer objeto em seu controlador de matriz conjunto/matriz de objetos, você vai querer perguntar por seus -arrangedObjects, então você está obtendo o índice do objeto no classificado coleta os controles do controlador de matriz.

Espero que ajude.

Atualização para Leão (10.7)

Em relação ao meu sexto ponto:Se você estiver visando a versão 10.7 e superior em seu aplicativo, [NSManagedObject agora fornece relacionamentos ordenados.][1] Use -mutableOrderedSetValueForKey:e -mutableOrderedSetValueForKey:para definir e recuperar NSOrderedSets.Yay!

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