No hay matriz "nativa" o tipo de diccionario en Core Data. Puede almacenar una NSArray
o una NSDictionary
como un atributo transformable. Esto usará el NSCoding
para serializar la matriz o el diccionario a un NSData
atributo (y deserializarlo adecuadamente al acceder). La ventaja de este enfoque es que es fácil. La desventaja es que no puede consultar la matriz o el diccionario (está almacenado como un BLOB en el almacén de datos) y si las colecciones son grandes, es posible que tenga que mover una gran cantidad de datos hacia / desde el almacén de datos (si es un almacén de datos SQLite) solo para leer o modificar una pequeña parte de la colección.
La alternativa es usar Core Data para muchas relaciones para modelar la semántica de la matriz o colección de diccionarios. Las matrices son más fáciles, así que comencemos con eso. Las relaciones de datos centrales a muchos realmente están modelando un conjunto, por lo que si necesita una funcionalidad similar a una matriz, debe ordenar el conjunto (el uso de una propiedad recuperada es una forma conveniente de hacerlo) o agregar un atributo de índice adicional a la entidad que almacena los elementos de la matriz y administra los índices usted mismo. Si está almacenando una matriz homogénea (todas las entradas son del mismo tipo), es fácil modelar la descripción de la entidad para las entidades de la matriz. De lo contrario, tendrá que decidir si usar un atributo transformable para almacenar los datos del artículo o crear una familia de entidades del artículo.
El modelado de un diccionario probablemente requerirá una relación de muchos a un conjunto de entidades que almacena una clave y un valor. Tanto la clave como el valor son análogos a la entidad del elemento para la matriz, descrita anteriormente. Por lo tanto, podrían ser tipos nativos (si los conoce con anticipación), un atributo transformable o una relación con una instancia de una familia de entidades específicas de tipo.
Si todo esto suena un poco desalentador, lo es. El horneado de datos arbitrarios en un marco dependiente del esquema como Core Data es difícil.
Para los datos estructurados, como las direcciones, casi siempre es más fácil pasar el tiempo modelando las entidades explícitamente (por ejemplo, un atributo para cada parte de la dirección). Además de evitar todo el código adicional para modelar un diccionario, esto hace que su interfaz de usuario sea más fácil (los enlaces "simplemente funcionarán") y su lógica de validación, etc., mucho más clara ya que Core Data puede manejar gran parte de ella.
Actualizar
A partir de OS X 10.7, Core Data incluye un tipo de conjunto ordenado que se puede usar en lugar de una matriz. Si puede apuntar a 10.7 o posterior, esta es la mejor solución para colecciones ordenadas (tipo matriz).