2012-08-05 5 views
1

Salut J'essaie de stocker un tableau dans NSUserDefaults mais j'ai des problèmes. La méthode accepte un NSDictionary que je vais stocker dans un tableau que je vais stocker dans NSUSerDefaults. Le problème est quand je fais un mutableCopy il dit que c'est un dictionnaire et non de type NSMutable array? Cette méthode est la première fois que j'appellerais NSUserDefaults donc je ne suis pas sûr pourquoi l'erreur se produit? Voici le code grâceNSUserDefaults et valeurs de stockage

+(void) getRecentPhoto:(NSDictionary *)recentPhoto{ 

NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults]; 
//stores it as a dictionary? error happens here 
NSMutableArray* recentPhotos = [[defaults objectForKey:@"recentPhoto"] mutableCopy]; 
NSLog(@"%@", [recentPhotos class]); 
if(!recentPhotos) recentPhotos = [NSMutableArray array]; 
BOOL copy = NO; 

//these will crash the program 
NSLog(@"%@", [[recentPhotos objectAtIndex:0] objectForKey:@"id"]); 
NSLog(@"%@", [recentPhoto objectForKey:@"id"]); 

//this checks if it has been stored before by using an id key 
for(int i =0; i < [recentPhotos count]; i++){ 

    if ([[[recentPhotos objectAtIndex:i] objectForKey:@"id"] isEqualToString:[recentPhoto objectForKey:@"id"]]) { 
     copy = YES; 
    } 
} 
if(copy ==NO) 
[recentPhotos addObject:recentPhoto]; 
[defaults setObject:recentPhoto forKey:@"recentPhoto"]; 
[defaults synchronize]; 


} 

Ceci est l'erreur

NSInvalidArgumentException', reason: '-[__NSCFDictionary objectAtIndex:]: unrecognized selector 

Répondre

2

Je crois que le problème est, à la fin de cette méthode, vous essayez de stocker recentPhoto, qui est un dictionnaire, en défaut utilisateur au lieu de recentPhotos, le tableau mutable que vous souhaitez stocker.

En fait, je pense qu'il ne va pas tomber en panne à la première fois que cette méthode est appelée puisque recentPhoto n'a pas été stockée dans la configuration par défaut de l'utilisateur. Mais après ça, ça le fera.

+0

mais la méthode se bloque lorsque je fais le premier NSLog –

+1

Oui, elle n'a pas de méthode objectAtIndex: puisque ce que vous obtenez de l'utilisateur par défaut est un dictionnaire, pas un tableau. – Selkie

+0

Ce sont des moments comme ceux-ci quand je me demande quel code est derrière certaines des applications que j'utilise ... – jrtc27

Questions connexes