尝试写入 .plist 文件,但无法正常工作
Posted
技术标签:
【中文标题】尝试写入 .plist 文件,但无法正常工作【英文标题】:Trying to write to a .plist file, but it's not working 【发布时间】:2012-05-23 00:59:36 【问题描述】:我正在尝试将一段非常简单的数据写入 .plist 文件,并且我已经检查了各种代码示例,但我很难让它工作。
首先是创建文件本身并返回路径的方法:
-(NSString *)getFilePath
NSArray *thePath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
return [[thePath objectAtIndex:0] stringByAppendingPathComponent:@"events.plist"];
然后这是我连接到按钮的操作。它现在只插入一行虚拟数据。或者至少,这就是我想要做的。
- (IBAction)saveData:(id)sender
NSArray *data = [[NSArray alloc] initWithObjects:@"E3 Expo", @"05-06-2012", nil];
[data writeToFile:[self getFilePath] atomically:YES];
但它不起作用。我通过 Xcode 中的 Organizer 检查了用户文档的目录,“Documents”文件夹中没有创建任何内容。
任何帮助将不胜感激。 :)
【问题讨论】:
【参考方案1】:您必须将字典设置为根 plist 对象。
[编辑:如果看不到文件,请使用NSFileManager
创建它]
NSError *error;
NSString *plistPath = [self getFilePath];
NSArray *data = [[NSArray alloc] initWithObjects:@"E3 Expo", @"05-06-2012", nil];
NSDictionary *plistDict = [NSDictionary dictionaryWithObject: data forKey: @"array"];
NSData *plistData = [NSPropertyListSerialization dataFromPropertyList:plistDict
format:NSPropertyListXMLFormat_v1_0
errorDescription:&error];
if(plistData)
//not necessary
if ([[NSFileManager defaultManager] fileExistsAtPath: plistPath])
[[NSFileManager defaultManager] removeItemAtPath: plistPath error: &error];
[[NSFileManager defaultManager] createFileAtPath: plistPath contents:plistData attributes: nil];
//necessary
[plistData writeToFile: plistPath atomically:YES];
else
NSLog(error);
[error release];
//also release data, since you retained it (sorry, memory management OCD)
[data release];
Based on Apple documentation - scroll to Write Out the Property List
【讨论】:
它不工作。所有代码都在执行,但 Documents 目录完全为空。 这不是一个合适的 plist,但它应该可以工作。来自writeToFile:atomically::如果数组的内容都是属性列表对象(NSString, NSData, NSArray, 或者 NSDictionary 对象),这个方法写的文件可以用类方法arrayWithContentsOfFile: 或者实例方法初始化一个新数组initWithContentsOfFile:. 查看已编辑的答案,尽管我认为没有必要使用 NSFileManager 创建文件。我测试了它并用 iExplorer 检索了文件,似乎没问题。以上是关于尝试写入 .plist 文件,但无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章