尝试写入 .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 文件,但无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

Swift 3:无法将数据写入 plist 文件

无法在 iOS 中将数据写入 .plist

无法将数据保存到 Plist 中?

如何成功写入plist?

Laravel 刀片附加到部分无法正常工作

Swift 2:使用多维对象写入 plist