0

我的班级在读取和写入数据到 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是一个布尔值。

任何帮助将不胜感激,如果您需要更多信息,请告诉我。谢谢。

4

1 回答 1

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 用于此类事情。

希望有帮助。

于 2011-11-11T01:51:38.227 回答