1

我正在尝试将一段非常简单的数据写入 .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”文件夹中没有创建任何内容。

任何帮助,将不胜感激。:)

4

1 回答 1

0

您必须将字典设置为根 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];

基于 Apple 文档 - 滚动到写出属性列表

于 2012-05-23T02:26:10.850 回答