Matrices NSUserDefaults anidadas de lectura / escritura

Tengo la siguiente estructura de datos:

- Cards -- Item 0 --- Name: Card Name --- Number: Card Number --- Type: Card Type -- Item 1 --- Name: Card Name --- Number: Card Number --- Type: Card Type ... 

El usuario puede agregar tantas cartas como desee, así que Nombre, Número y Tipo son definidos por el usuario.

La primera pregunta es, ¿cómo puedo escribir estos datos en un NSUserDefauls (nested así)

La segunda pregunta es, y cómo puedo recuperar estos datos y mostrar el nombre de cada tarjeta en una vista de tabla. (Ya tengo la vista de tabla configurada y funcionando, así que es cuestión de get los datos de NSUserDefaults).

Cualquier ejemplo de código es muy apreciado.

Gracias

Para crear esta estructura es bastante simple, crea un dictionary que tiene un valor de matriz para su key 'Tarjetas'. Ejemplo a continuación …

 NSMutableDictionary *cards = [NSMutableDictionary dictionary]; NSMutableArray *cardArray = [NSMutableArray array]; NSMutableDictionary *item = [NSMutableDictionary dictionary]; [item setValue:@"Card Name" forKey:@"Name"]; [item setValue:@"Card Number" forKey:@"Number"]; [item setValue:@"Card Type" forKey:@"Type"]; [cardArray addObject:item]; [cards setValue:cardArray forKey:@"Cards"]; [[NSUserDefaults standardUserDefaults] setValue:cards forKey:@"user_cards"]; [[NSUserDefaults standardUserDefaults] synchronize]; 

Para recuperar sus tarjetas, haría algo como … Asumir self.cards es un NSMutableArray ivar ..

 NSMutableDictionary *stonetworking = [[NSUserDefaults standardUserDefaults] valueForKey:@"user_cards"]; self.cards = [stonetworking valueForKey:@"Cards"]; 

Su vista de tabla debería usar cards ivar para completar sus datos, como a continuación.

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath ...... //Now we populate each row of the cell with each `card` Name. cell.textLabel.text = [[self.cards objectAtIndex:[indexPath row]] valueForKey:@"Name"]; ..... } 

Para volver a save cualquier tarjeta recién agregada a su dictionary almacenado, haría algo como esto …

 NSMutableDictionary *newCard = [NSMutableDictionary dictionary]; [newCard setValue:@"Card Name" forKey:@"Name"]; [newCard setValue:@"Card Number" forKey:@"Number"]; [newCard setValue:@"Card Type" forKey:@"Type"]; [self.cards addObject:newCard]; [[NSUserDefaults standardUserDefaults] valueForKey:@"user_cards"] setValue:self.cards forKey:@"Cards"]; [[NSUserDefaults standardUserDefaults] synchronize]; 

Si esto ha ayudado con sus preguntas, acéptela como respuesta.

salvar

 NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; // saving an NSArray [prefs setObject:myArray forKey:@"keyToLookupArray"]; [prefs synchronize]; 

Recuperando

 NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; // getting an NSArray NSArray *myArray= [prefs stringForKey:@"keyToLookupArray"];