如何在plist中写入数据?

时间:2011-10-02 18:32:37

标签: ios iphone plist

我已按照此答案将数据写入plist

How to write data to the plist?

但到目前为止,我的plist根本没有改变。

这是我的代码: -

- (IBAction)save:(id)sender
{
    NSString *path = [[NSBundle mainBundle] pathForResource:@"drinks" ofType:@"plist"];
    NSString *drinkName = self.name.text;
    NSString *drinkIngredients = self.ingredients.text;
    NSString *drinkDirection = self.directions.text;
    NSArray *values = [[NSArray alloc] initWithObjects:drinkDirection, drinkIngredients, drinkName, nil];
    NSArray *keys = [[NSArray alloc] initWithObjects:DIRECTIONS_KEY, INGREDIENTS_KEY, NAME_KEY, nil];
    NSDictionary *dict = [[NSDictionary alloc] initWithObjects:values forKeys:keys];
    [self.drinkArray addObject:dict];
    NSLog(@"%@", self.drinkArray);
    [self.drinkArray writeToFile:path atomically:YES];
}

我是否需要执行额外的操作?

我是iPhone SDK的新手,所以任何帮助都会受到赞赏。

1 个答案:

答案 0 :(得分:36)

您正在尝试将文件写入应用程序包,这是不可能的。而是将文件保存到Documents文件夹中。

NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
path = [path stringByAppendingPathComponent:@"drinks.plist"];

pathForResource方法只能用于读取您在Xcode中添加到项目中的资源。

以下是您在应用中修改plist时通常执行的操作:
1.首次启动时将drinks.plist从应用程序包复制到应用程序的Documents文件夹(使用NSFileManager)。
2.在读/写时仅使用Documents文件夹中的文件。

<强>更新

这是初始化 drinkArray 属性的方法:

NSString *destPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
destPath = [destPath stringByAppendingPathComponent:@"drinks.plist"];

// If the file doesn't exist in the Documents Folder, copy it.
NSFileManager *fileManager = [NSFileManager defaultManager];

if (![fileManager fileExistsAtPath:destPath]) {
    NSString *sourcePath = [[NSBundle mainBundle] pathForResource:@"drinks" ofType:@"plist"];
    [fileManager copyItemAtPath:sourcePath toPath:destPath error:nil];
}

// Load the Property List.
drinkArray = [[NSArray alloc] initWithContentsOfFile:destPath];