Não há matriz "nativa" ou tipo de dicionário no Core Data. Você pode armazenar um NSArray
ou um NSDictionary
atributo como transformável. Isso usará o NSCoding
para serializar a matriz ou dicionário para um NSData
atributo (e desserializar adequadamente após o acesso). A vantagem dessa abordagem é que é fácil. A desvantagem é que você não pode consultar a matriz ou o dicionário (ele é armazenado como um BLOB no repositório de dados) e, se as coleções forem grandes, poderá ser necessário mover muitos dados para / do repositório de dados (se for um armazenamento de dados SQLite) apenas para ler ou modificar uma pequena parte da coleção.
A alternativa é usar os relacionamentos Core Data para muitos para modelar a semântica da matriz ou coleção de dicionário. As matrizes são mais fáceis, então vamos começar com isso. Os relacionamentos Core Data para muitos estão realmente modelando um conjunto; portanto, se você precisar de uma funcionalidade semelhante a uma matriz, terá que classificar o conjunto (usar uma propriedade buscada é uma maneira conveniente de fazer isso) ou adicionar um atributo de índice extra à entidade que armazena os itens da matriz e gerencia você mesmo os índices. Se você estiver armazenando uma matriz homogênea (todas as entradas são do mesmo tipo), é fácil modelar a descrição da entidade para as entidades da matriz. Caso contrário, você terá que decidir se deseja usar um atributo transformável para armazenar os dados do item ou criar uma família de entidades do item.
A modelagem de um dicionário provavelmente exigirá uma relação de muitos com um conjunto de entidades que armazena uma chave e um valor. Tanto a chave quanto o valor são análogos à entidade do item para a matriz, descrita acima. Portanto, eles podem ser tipos nativos (se você os conhecer com antecedência), um atributo transformável ou um relacionamento com uma instância de uma família de entidades específicas do tipo.
Se tudo isso parece um pouco assustador, é. Colocar dados arbitrários em uma estrutura dependente de esquema como o Core Data é difícil.
Para dados estruturados, como endereços, é quase sempre mais fácil gastar o tempo modelando explicitamente as entidades (por exemplo, um atributo para cada parte do endereço). Além de evitar todo o código extra para modelar um dicionário, isso facilita a interface do usuário (as ligações "funcionarão") e a lógica de validação etc. muito mais clara, pois grande parte dele pode ser manipulada pelo Core Data.
Atualizar
No OS X 10.7, o Core Data inclui um tipo de conjunto ordenado que pode ser usado no lugar de uma matriz. Se você pode segmentar 10.7 ou posterior, esta é a melhor solução para coleções ordenadas (do tipo matriz).