Plist读写iPhone

时间:2011-11-11 00:27:34

标签: iphone objective-c ipad plist read-write

我在课堂上遇到麻烦,它会将数据读写到plist。这是一些代码:

第一个块来自我的自定义类,包含所有plist读写方法。

-(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];
}

然后我在另一个需要导入的类中,创建并使用类方法:

#import "plistReadWrite.h"
plistReadWrite *readWrite;

如果我尝试在控制台中看到它的值,我会得到(null)返回。

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

这当然是在我写完一些数据之后:

[readWrite writeUserIsMale:isUserMale];

isUserMale是bool值。

任何帮助都会受到大力赞赏,如果您需要更多信息,请告诉我。感谢。

1 个答案:

答案 0 :(得分:0)

我认为这大多是正确的。在你的writeUserIsMale:方法中你想要一个可变字典,所以你可以实际设置那个键(这应该是你原来崩溃的,所以我猜一个复制/粘贴问题?)

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

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

然后当您记录该值时,请记住bool(或BOOL)是基元,而不是对象:

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

最后,由于这是objective-c,我可能会使用BOOL而不是bool。

我假设这只是一个简单的例子,你知道NSUserDefaults就是这种事情。

希望有所帮助。