Estoy desarrollando una aplicación en la que deseo utilizar un NSDictionary
. ¿Alguien puede enviarme un código de muestra explicando el procedimiento de cómo usar un NSDictionary
para almacenar datos con un ejemplo perfecto?¿Cómo podemos almacenar en un NSDictionary? ¿Cuál es la diferencia entre NSDictionary y NSMutableDictionary?
Respuesta
Los NSDictionary y NSMutableDictionary documentos son probablemente su mejor apuesta. Incluso tienen algunos buenos ejemplos de cómo hacer varias cosas, como ...
... creando un NSDictionary
NSArray *keys = [NSArray arrayWithObjects:@"key1", @"key2", nil];
NSArray *objects = [NSArray arrayWithObjects:@"value1", @"value2", nil];
NSDictionary *dictionary = [NSDictionary dictionaryWithObjects:objects
forKeys:keys];
... iterar sobre ella
for (id key in dictionary) {
NSLog(@"key: %@, value: %@", key, [dictionary objectForKey:key]);
}
... hacerlo mutable
NSMutableDictionary *mutableDict = [dictionary mutableCopy];
Nota: la versión histórica antes de 2010: [[Diccionario mutableCopy] autorelease]
... y alterarlo
[mutableDict setObject:@"value3" forKey:@"key3"];
... a continuación, almacenar en un archivo
[mutableDict writeToFile:@"path/to/file" atomically:YES];
... y léalo nuevamente aga en
NSMutableDictionary *anotherDict = [NSMutableDictionary dictionaryWithContentsOfFile:@"path/to/file"];
... leer un valor
NSString *x = [anotherDict objectForKey:@"key1"];
... comprobar si existe una clave
if ([anotherDict objectForKey:@"key999"] == nil) NSLog(@"that key is not there");
... miedo utilizar la sintaxis futurista
A partir de 2014 en realidad se puede simplemente escribir dict [@ "llave"] en lugar de [objectForKey dict: "clave" @]
NSDictionary *dict = [NSDictionary dictionaryWithObject: @"String" forKey: @"Test"];
NSMutableDictionary *anotherDict = [NSMutableDictionary dictionary];
[anotherDict setObject: dict forKey: "sub-dictionary-key"];
[anotherDict setObject: @"Another String" forKey: @"another test"];
NSLog(@"Dictionary: %@, Mutable Dictionary: %@", dict, anotherDict);
// now we can save these to a file
NSString *savePath = [@"~/Documents/Saved.data" stringByExpandingTildeInPath];
[anotherDict writeToFile: savePath atomically: YES];
//and restore them
NSMutableDictionary *restored = [NSDictionary dictionaryWithContentsOfFile: savePath];
Buena explicación. Fue útil ... –
@Ben Gottlieb Primera parte: Gracias por buenas explicaciones. De hecho, quiero guardar dos de mis datos de UItextField en un archivo de MutableDictionary. Aquí escribió 'NSString * savePath = [@" ~/Documents/Saved.data "stringByExpandingTildeInPath];', ahora mi pregunta es, ¿qué es el archivo 'Saved.data' aquí? ¿Cómo puedo hacerlo? – Tulon
@Ben Gottlieb Parte dos: Y en mi caso puse un archivo de texto (.rtf) en el siguiente directorio 'Archivos de soporte> Archivos de medios> Documentos> userData.rtf'. Ahora puedo guardar este tipo de datos de Mutabledictionary en el archivo de texto ? ¿Y cuál será el directorio perfecto en este caso? Estaba intentando con esto '[userData writeToFile: @" MediaFiles/Documents/userData.rtf "atómicamente: SÍ];' & con esto '[userData writeToFile: @" Documents/userData.rtf "atómicamente: SÍ];', pero no funcionó Ten un buen día. – Tulon
La diferencia clave: NSMutableDictionary puede ser modificado en su lugar, NSDictionary no puede. Esto es cierto para todas las otras clases NSMutable * en Cocoa. NSMutableDictionary es una subclase de NSDictionary, por lo que todo lo que puede hacer con NSDictionary puede hacerlo con ambas. Sin embargo, NSMutableDictionary también agrega métodos complementarios para modificar las cosas en su lugar, como el método setObject:forKey:
.
Puede convertir entre los dos así:
NSMutableDictionary *mutable = [[dict mutableCopy] autorelease];
NSDictionary *dict = [[mutable copy] autorelease];
Es de suponer que desea almacenar datos mediante solicitud dirigida a un archivo.NSDictionary tiene un método para hacer esto (que también trabaja con NSMutableDictionary):
BOOL success = [dict writeToFile:@"/file/path" atomically:YES];
Para leer un diccionario de un archivo, hay un método correspondiente:
NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:@"/file/path"];
Si desea leer el archivo un NSMutableDictionary, simplemente use:
NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithContentsOfFile:@"/file/path"];
Gracias por la respuesta ... –
- 1. Cómo almacenar un NSArray en un NSDictionary?
- 2. Agregar a NSDictionary entradas a NSMutableDictionary
- 3. NSDictionary setValue:
- 4. cómo almacenar NSDictionary en NSUserdefaults y cómo puedo recuperarlo
- 5. Guardar NSDictionary a NSUserDefaults
- 6. ¿Cómo puedo obtener el pedido original de NSDictionary/NSMutableDictionary?
- 7. Adjuntar NSDictionary a otro NSDictionary
- 8. ¿Cómo heredar de NSDictionary?
- 9. ¿Cuál es el equivalente de un NSDictionary en C#?
- 10. Objeto débil en un NSDictionary?
- 11. bloques en nsdictionary?
- 12. Convirtiendo NSData en NSDictionary
- 13. Ordenando NSDictionary
- 14. ¿Cómo puedo ordenar un NSDictionary?
- 15. Plist Array para NSDictionary
- 16. Inserte NSArray en un NSDictionary
- 17. Creación de un NSDictionary
- 18. cómo almacenar NSDictionary como propiedades transformables en los datos centrales
- 19. Inicializando NSDictionary
- 20. NSDictionary writeToFile
- 21. Convertir NSArray en NSDictionary
- 22. NSPredicar en NSDictionary
- 23. ¿Cuál es la diferencia entre valueforKey :, objectForKey :, y valueForKeyPath :?
- 24. ¿Se pueden duplicar las llaves en NSDictionary?
- 25. Cómo deshabilitar NSDictionary Ordenar automáticamente la clave sabia
- 26. Guardar NSDictionary a plist
- 27. convertir NSDictionary a NSString
- 28. Cómo pasar un NSDictionary con postNotificationName: object:
- 29. Convierta nsdictionary a nsdata
- 30. typedef enum escriba como clave para NSDictionary?
Se podría empezar por echar un vistazo a la documentación NSDictionary ... – stefanB
los RTFMs cortesía de alguna manera parecen más cáustica que los explícitos. –
@stefanB Para muchos programadores nuevos, la documentación oficial suele ser muy complicada y confusa, por lo que una vista básica de _x_ en SO ayuda. –