繁体   English   中英

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

[英]can't write data to .plist in iOS

我正在尝试使用下一个方法将数据写入.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和下一个内容:

在此处输入图片说明

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

在此处输入图片说明

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

在此处输入图片说明

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

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

您应该改为使用应用程序的文档目录。 这就是您可以执行的操作。 在这里,就您所知,我正在从主捆绑包复制数据,附加新的详细信息并写回到documents目录。

// 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];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM