编辑 plist 文件(objective c)

Editing plist file(objective c)

我是 Objective C 的新手,目前正在开发 iphone 应用程序。我的应用程序需要接受用户输入(字符串)并存储它们,所以我使用 plist 来存储数据。目前,我可以从 plist 文件中读取。但是,当我尝试写入 plist 文件时,文件本身根本没有改变。

我想做的是将用户的输入附加到现有的 plist 文件中。所以我读取了 plist 文件并将数组存储到 mutableArray。然后,我使用 addObject 函数将新的用户输入附加到 mutableArray 的末尾。到目前为止,一切正常,mutableArray 正是我想要的。最后一步对我不起作用:

[mutableArray writeToFile:[self dataFilePath] atomically:YES];

我假设我的 plist 文件(与 .h 和 .m 文件一起位于我的资源文件夹中)应该在执行此行后更改,并且应该附加新的用户输入,但文件没有好像一点都没变。

我看到有人说我应该把plist文件从NSBundle复制到Documents目录下,因为plist文件在resource文件夹里,但是在youtube上几乎所有的教程中,都没有出现过类似的问题那和他们的代码在资源文件夹中的 plist 文件中仍然可以正常工作。

提前感谢您的帮助。

是的,您必须将文件从 NSBundle 复制到 NSDocumentUser,例如文件 "NimrokhRavanshenasi.sqlite3"

NSFileManager* fileManager = [NSFileManager defaultManager];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];

NSString *writableDbtPath = [documentsDirectory stringByAppendingPathComponent:@"NimrokhRavanshenasi.sqlite3"];

BOOL success = [fileManager fileExistsAtPath:writableDbtPath];
NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"NimrokhRavanshenasi.sqlite3"];
NSError *error;
success = [fileManager copyItemAtPath:defaultDBPath toPath:writableDbtPath error:&error];


NSFileManager *filemgr = [NSFileManager defaultManager];

sqlite3_stmt *compiledStatement;
if([filemgr fileExistsAtPath:writableDbtPath]){
    if (sqlite3_open([writableDbtPath UTF8String], &_contactDB) != SQLITE_OK) {
        NSLog(@"Failed to open database!");