NSDictionary y datos básicos

Estoy tratando de get algún conocimiento en los datos centrales. Hasta ahora he logrado crear entidades y agregar, recuperar y eliminar valores de esta entidad.

Mi pregunta es la siguiente. ¿Cuáles son las posibles forms de almacenar las properties de NSDictionary en una entidad cuando se usan datos centrales?

debe usar "Atributos transformables":

  1. abrir *.xcdatamodeld file
  2. entidad seleccionada
  3. agregue el atributo (asígnele un nombre, por ejemplo, " info ") y configure el tipo como " Transformable "
  4. generar files de subclass NSManagedObject apropiados ( NSManagedObject > Nuevo-> Archivo … subclass NSManagedObject )
  5. abra el file *.h y cambie el tipo de propiedad " info " de id a NSMutableDictionary *

todo lo demás funciona automáticamente

Para get más información, consulte: https://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/CoreData/Articles/cdNSAttributes.html

Hay varias maneras de abordar esto:

a. Cree una entidad que sea representativa del NSDictionary, de modo que cada key de dictionary esté representada por un atributo de entidad.

segundo. Si no le agrada el enfoque anterior en el que crea una entidad separada, puede almacenar el NSDictionary en un solo campo de Datos del núcleo del tipo NSData, siempre que serialice primero el NSDictionary en NSData.

 //NSDictionary to NSData NSMutableData *data = [[NSMutableData alloc] init]; NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data]; [archiver encodeObject:dictionary forKey:@"Some Key Value"]; [archiver finishEncoding]; // data is now ready to use 

También debería convertir el NSData a NSDictionary cuando lo lea desde Core Data.

 // NSData to NSDictionary NSData *data = [[NSMutableData alloc] initWithContentsOfFile:[self dataFilePath]]; NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data]; NSDictionary *dictionary = [[unarchiver decodeObjectForKey:@"Some Key Value"] retain]; [unarchiver finishDecoding]; // dictionary is now ready to use 

do. Finalmente, puede usar un marco de persistencia como Sensible TableView, donde todas sus estructuras de datos se obtienen, muestran y guardan automáticamente. Me salva una tonelada de código yo mismo.

Cambia el tipo de atributo por Transformable .

Si está utilizando mogenerator (muy bien debería hacerlo), el tipo pnetworkingeterminado generado para un transformable es id .

Para que el mogenerador genere el tipo específico NSDictionary , puede agregar una key personalizada attributeValueClassName con el valor NSDictionary para el atributo. Consulte esta captura de pantalla .

Tengo una solución de trabajo para eso, simplemente guardo dictionaryObj.description en String en Core Data y mientras busco la cadena del dictionary que puedes convertir en dictionary

 -(NSMutableDictionary *)getMetaDataDictionary:(NSString *)string { NSData * data = [string dataUsingEncoding:NSUTF8StringEncoding]; NSPropertyListFormat format; NSMutableDictionary * metaDataDictionary; @try { NSError * error; metaDataDictionary = [NSPropertyListSerialization propertyListWithData:data options:NSPropertyListImmutable format:&format error:&error]; if(!metaDataDictionary) { NSLog(@"ERROR: COULD NOT PARSE META-DATA : %@", error.description); } } @catch(NSException * exp) { NSLog(@"DICTIONARY :: %@", exp.description); } return metaDataDictionary; }