ios core-data nsdictionary iphonecoredatarecipes

ios - NSDictionary y Core Data



core-data iphonecoredatarecipes (4)

Cambie el tipo de atributo a Transformable .

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

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

Por favor, estoy tratando de obtener un poco de conocimiento en los datos básicos. Hasta ahora me he acostumbrado a crear entidades y agregar, recuperar y eliminar valores de esta entidad.

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


Hay varias formas de abordar esto:

a. Cree una entidad que sea representativa de NSDictionary, de modo que cada clave de diccionario esté representada por un atributo de entidad.

segundo. Si no le gusta el enfoque anterior en el que crea una entidad separada, aún puede almacenar el NSDictionary en un único campo de datos principales de tipo NSData, siempre que serialice NSDictionary a NSData primero.

//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 necesitarás convertir el NSData a NSDictionary cuando lo leas 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 persistente como Sensible TableView, donde todas sus estructuras de datos se recuperan, visualizan y guardan automáticamente. Me ahorra una tonelada de código.


Tengo una solución alternativa para eso, simplemente guarde el dictionaryObj.description en String en Core Data y mientras recupero la cadena de diccionario, puede convertirlo en diccionario

-(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; }


deberías usar "Atributos Transformables":

  1. abrir el archivo *.xcdatamodeld
  2. entidad seleccionada
  3. agregar atributo (nombrarlo, por ejemplo, " información ") y establecer el tipo como " Transformable "
  4. generar archivos de subclase NSManagedObject apropiados ( NSManagedObject > Nuevo-> Archivo ... Subclase NSManagedObject )
  5. abra *.h archivo y cambie el tipo de propiedad " información " de id a NSMutableDictionary *

todo lo demás funciona automáticamente

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