2010-07-17 17 views
0

J'ai un StateArray.plist mis en place avec 50 entrées de dictionnaire contenant chacune une chaîne avec le nom de l'état et un nombre 0. Ce que je veux être en mesure de faire est de changer le 0 à un 1 à travers un contrôle segmenté et enregistrer le plist mis à jour. Le code que j'ai est ci-dessous et ne sauvera pas le nombre changé.Comment changer une valeur int de NSMutableDictionary

-(void) viewWillAppear: (BOOL) animated 
{ 
[super viewWillAppear:animated]; 
nameOfStateTextField.text = [states objectForKey:NAME_KEY]; 
} 

//segmented control 
-(IBAction)visitedChanged 
{ 
selectedVisited = visitedSegmentedControl.selectedSegmentIndex; 
} 


-(IBAction)saveButton 
{ 
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSString *path = [documentsDirectory stringByAppendingPathComponent:@"StateArray.plist"]; 
[states setValue:selectedVisited forKey:THERE_KEY]; 
[states writeToFile:path atomically:YES]; 
} 

La valeur de contrôle segmentée modifiée devrait finir par le nouveau THERE_KEY et être écrit dans le répertoire Documents et enregistré. Quel pourrait être le problème ici?

Répondre

1

Vous devez placer un objet NSNumber dans le dictionnaire. Qu'est-ce que type de données est « selectedVisited » ?, Je suppose que vous ne recevez pas une erreur sur cette ligne:

selectedVisited = visitedSegmentedControl.selectedSegmentIndex; 

le type de données que vous choisissez est probablement un NSInteger. (Depuis selectedSegmentIndex est un NSInteger).

Vous devez mettre la valeur dans le dictionnaire quelque chose comme ceci:

NSNumber *newValue = [[NSNumber alloc] initWithInteger:selectedVisited]; 
[states setValue:newValue forKey:THERE_KEY]; 
[newValue release];