【问题标题】:unable to save plist ios无法保存 plist ios
【发布时间】:2011-11-13 10:12:06
【问题描述】:

我可以将 plist 文件保存在模拟器中,但我无法将 Plist 文件保存在设备中。任何建议。

我正在使用

NSString* dictPath = [[NSBundle mainBundle] pathForResource:@"Dictionary" ofType:@"plist"];
NSDictionary * dict = [[NSDictionary alloc] initWithContentsOfFile:dictPath];

读取文件

[dict writeToFile:dictPath atomically: YES];

写入文件。

【问题讨论】:

  • 这与 main Bundle 只读有关吗?如何将 plist 保存在 r/w 访问位置

标签: ios save plist


【解决方案1】:

您不能写入主包。您只能从主包中读取。如果你想写一个文件,你需要把它放到你应用的文档目录中。

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *path = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.plist",plistName]]; 

如果您需要主包中的 plist,您可以先将其复制到文档目录中,然后对其进行修改。建议检查以确保只复制一次。

NSError *error;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *path = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.plist",plistName]]; 

NSFileManager *fileManager = [NSFileManager defaultManager];

if (![fileManager fileExistsAtPath: path]){
    NSLog(@"File don't exists at path %@", path);

    NSString *plistPathBundle = [[NSBundle mainBundle] pathForResource:plistName ofType:@"plist"];

    [fileManager copyItemAtPath:plistPathBundle toPath: path error:&error]; 
}else{
    NSLog(@"File exists at path:%@", path);
}

【讨论】:

    【解决方案2】:

    通常您会将这些文件存储在 ~/Documents 或 ~/Library 中,具体取决于文件。问题What is the documents directory (NSDocumentDirectory)? 包含您需要理解的文档链接和示例代码。

    【讨论】:

      【解决方案3】:

      您需要将plist保存在Documents目录中

      NSString *mainBundlePath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
      NSString *dictPath = [mainBundlePath stringByAppendingPathComponent:@"Dictionary"];
      NSDictionary * dict = ...; //Construct your dictionary
      [dict writeToFile:dictPath atomically: YES];
      

      阅读

      NSDictionary * dict = [[NSDictionary alloc] initWithContentsOfFile:dictPath];
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-12-15
        • 2014-11-17
        • 1970-01-01
        • 2020-11-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多