2011-11-11 4 views
0

J'ai des problèmes avec ma classe qui lit et écrit des données à une plist. Voici un code:Plist Lire et écrire iPhone

Cette première partie est de ma classe personnalisée avec toutes mes méthodes de lecture et d'écriture.

-(NSString *) dataFilePath{ 
    NSArray *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentDirectory = [path objectAtIndex:0]; 
    return [documentDirectory stringByAppendingPathComponent:@"userInformation.plist"]; 
} 

-(bool)readUserIsMale{ 
    NSString *filePath = [self dataFilePath]; 
    if ([[NSFileManager defaultManager] fileExistsAtPath:filePath]) {   
     NSDictionary *boolDict = [[NSDictionary alloc] initWithContentsOfFile:[self dataFilePath]]; 
     return [[boolDict objectForKey:@"boolUserIsMale"] boolValue]; 
    } 
    return nil; 
} 

-(void)writeUserIsMale:(bool)boolValue{ 
    NSDictionary *boolDict = [[NSDictionary alloc] init]; 
    [boolDict setValue:[NSNumber numberWithBool:boolValue] forKey:@"boolUserIsMale"]; 
    [boolDict writeToFile:[self dataFilePath] atomically:YES]; 
} 

Je puis dans une autre classe où vous le souhaitez importer, créer et utiliser les méthodes de classe:

#import "plistReadWrite.h" 
plistReadWrite *readWrite; 

Si je tente de voir sa valeur dans la console que je reçois (null) return.

NSLog(@"%@",[readWrite readUserIsMale]); 

Ceci est bien sûr après avoir écrit quelques données comme ceci:

[readWrite writeUserIsMale:isUserMale]; 

isUserMale étant une valeur bool.

Toute aide serait grandement appréciée, si vous avez besoin d'infos, faites-le moi savoir. Merci.

Répondre

0

Je pense que c'est la plupart du temps correct. Dans votre writeUserIsMale: la méthode que vous voulez un dictionnaire mutable, de sorte que vous pouvez réellement définir cette clé (cela aurait écrasé pour vous est, donc je devine une copie/problème de pâte?)

//NSDictionary *boolDict = [[NSDictionary alloc] init]; 
//should be: 

NSMutableDictionary *boolDict = [[NSMutableDictionary alloc] init]; 

Et puis quand vous vous connectez la valeur, rappelez-vous que bool (ou BOOL) sont primitives, pas des objets si:

NSLog (@"%d",[readWrite readUserIsMale]); // Will print 0 or 1 
// or if you prefer: 
NSLog (@"%@", ([readWrite readUserIsMale]? @"YES":@"NO")); // print YES or NO 

Enfin, je voudrais probablement utiliser puisque c'est-c objectif BOOL au lieu de bool. Je suppose que c'est juste un exemple simple, et que vous connaissez NSUserDefaults pour ce genre de chose.

Espérons que ça aide.