- (void)viewDidLoad
{
[super viewDidLoad];
if ([[NSFileManager defaultManager] fileExistsAtPath:pathString])
{
infoDict = [[NSMutableDictionary alloc] initWithContentsOfFile:pathString];
}
else
{
infoDict = [[NSMutableDictionary alloc]initWithObjects:[NSArray arrayWithObjects:@"BeginFrame",@"EndFrame", nil] forKeys:[NSArray arrayWithObjects:[NSNumber numberWithBool:YES],[NSNumber numberWithBool:YES], nil]];
if ([infoDict writeToFile:pathString atomically:YES])
{
NSLog(@"Created");
}
else
{
NSLog(@"Is not created");
NSLog(@"Path %@",pathString);
}
}
这是我的代码。我检查文件是否已创建 - 如果没有 - 我创建了一个NSMutableDictionary
并将其写入路径中的文件,但writeToFile
方法返回NO
。哪里有问题?如果我使用NSFileManager
创建此文件,它可以正常工作,但在我想编写字典时却不行。
答案 0 :(得分:29)
writeToFile:atomically
仅在您调用的字典是有效的属性列表对象(see docs)时才有效。
要使NSDictionary
成为有效的属性列表对象,除其他外,还有keys must be strings,但在您的示例中,键是NSNumber
个实例。
答案 1 :(得分:12)
您无法控制有时会写的内容。例如,当您要编写从服务器获取的JSON对象时,无法避免null
值。
NSData
与这些“无效”值兼容,因此在这些情况下,将NSArray
或NSDictionary
转换为NSData
是理想的方式。
写:
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:jsonObject];
[data writeToFile:path atomically:YES];
读:
NSData *data = [NSData dataWithContentsOfFile:path];
NSDictionary *jsonObject = [NSKeyedUnarchiver unarchiveObjectWithData:data];