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

时间:2015-09-27 10:45:27

标签: ios cocoa-touch nsarray plist

我试图用下一个方法将数据写入.plist文件:

-(IBAction)saveCity:(id)sender{
    NSString * path = [[NSBundle mainBundle] pathForResource:@"propTest" ofType:@"plist"];
    NSMutableArray * array = [NSMutableArray arrayWithContentsOfFile:path];
    [ array addObject:@"addedTest"];
    if ([array writeToFile:path atomically:NO]){
        NSLog(@"written");
    }
}

我已使用下一个内容手动创建了propTest.plist:

enter image description here

调用saveCity之后:好几次,我可以看到我从propTest.plist读取的数组包含我的字符串:

enter image description here

但实际上它只包含我手动添加的内容:

enter image description here

你能否帮我找到为什么新的字符串不会永久添加到.plist中的原因?

1 个答案:

答案 0 :(得分:2)

简单的答案是 - 不,你不能这样做。 iOS应用程序在沙箱环境中运行,您无法在运行时修改应用程序包,因此无法在[NSBundle mainBundle]内编写任何内容。

您应该使用应用程序的文档目录。这就是你如何做到这一点。在这里,只是为了您的知识,我从主包中复制数据,附加新的详细信息并写回文档目录。

// Get you plist from main bundle
NSString *path = [[NSBundle mainBundle] pathForResource:@"propTest" ofType:@"plist"];
NSMutableArray *array = [NSMutableArray arrayWithContentsOfFile:path];

// Add your object
[array addObject:@"addedTest"];

// Get Documents directory path
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *plistLocation = [documentsDirectory stringByAppendingPathComponent:@"propTest.plist"];

// Write back to Documents directory
[array writeToFile:plistLocation atomically:YES];