【问题标题】:Editing plist file(objective c)编辑 plist 文件(目标 c)
【发布时间】:2015-12-24 18:10:29
【问题描述】:

我是 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文件在资源文件夹中,但是在youtube上几乎所有的教程中,都没有出现过这样的问题并且他们的代码在资源文件夹中的 plist 文件中仍然可以正常工作。

提前感谢您的帮助。

【问题讨论】:

  • 的问题。您不能写入 iOS 应用程序的捆绑包
  • 如果 plist 在应用程序包中,它在真实设备上是不可写的。快速测试是在模拟器上运行您的代码。如果保护是问题,我相信它会在模拟器上工作并在手机上失败。
  • 谢谢 vadian 和 Phillip!只是另一个问题:那么我应该仅在应用程序第一次启动时将 plist 文件从捆绑包复制到文档目录并从那里访问它吗?还是有其他方法可以做到这一点?我想没有理由从一开始就在资源文件夹中包含一个 plist 文件,因为我可以在应用程序启动时在文档目录中创建一个新的 plist 文件并从那里开始。

标签: objective-c xcode plist


【解决方案1】:

是的,您必须将文件从 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!");

【讨论】:

  • 谢谢阿夫辛和埃克塔!我只是好奇资源文件夹中是否需要 plist 文件,因为我可以在应用程序启动时在文档目录中创建一个新的 plist 文件,而不是从资源文件夹中复制 plist 文件。
  • File.sqlite3 示例,您可以将此代码用于 file.plist 并继续
  • 首先在 NSBunlde 上创建一个 Plist 文件并使用此代码将文件从 NSBundle 复制到 NSDocumentUser
猜你喜欢
  • 1970-01-01
  • 2011-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多