我在课堂上遇到麻烦,它会将数据读写到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值。
任何帮助都会受到大力赞赏,如果您需要更多信息,请告诉我。感谢。
答案 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就是这种事情。
希望有所帮助。