【问题标题】:Can't save and load plist file无法保存和加载 plist 文件
【发布时间】:2014-11-17 23:51:19
【问题描述】:

当我尝试使用以下方法创建 plist 文件('Checklist.plist')时,我看不到目录中的文件。

- (NSString *)documentsDirectory {
NSArray *paths = NSSearchPathForDirectoriesInDomains( NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths firstObject];
return documentsDirectory; }

- (NSString *)dataFilePath {
return [[self documentsDirectory] stringByAppendingPathComponent:@"Checklists.plist"];
}

为什么我在目录中看不到文件?我该如何解决这个问题?

【问题讨论】:

  • “看不到”是什么意思?你确定文件创建成功(没有返回错误)?您是否在模拟器文件系统上寻找正确的位置?
  • 那些方法不会创建任何东西...告诉我们你在哪里写文件
  • 我在运行程序时没有看到任何错误消息。是的。我曾尝试使用 Simulator 文件系统查看文件。 #本
  • 我已经更新了截图。你可以看到磁盘上已经创建了 Checklist.plist 文件。但是当我进入目录时,我看不到任何文件,甚至我也看不到Library文件夹下的文档目录!

标签: ios plist xcode6 nsfilemanager


【解决方案1】:

你在文件中保存了一些东西吗?

NSString *test = @"test";
[test writeToFile:[self dataFilePath] atomically:YES];

如果你在模拟器中运行,你可以NSlog这个文件路径,然后打开finder,按cmd + shift + g粘贴文件路径,不要包括Checklist.plist,只记录文件路径,你会看到文件您只需创建名为Checklist.plist

这是我所有的代码:

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    NSArray *testArray = [NSArray arrayWithObjects:@"test", nil];
    [testArray writeToFile:[self dataFilePath] atomically:YES];
}
- (NSString *)documentsDirectory {
    NSArray *paths = NSSearchPathForDirectoriesInDomains( NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths firstObject];
    return documentsDirectory; 
}

- (NSString *)dataFilePath {
    return [[self documentsDirectory] stringByAppendingPathComponent:@"Checklists.plist"];
}
- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

【讨论】:

  • 是的。我在 plist 文件中保存了一些对象。我已经按照你提到的所有可能的方式进行操作,但没有用。
  • 谢谢。它成功了!你能解释一下为什么会出现问题吗?
  • @MdRiduan 因为您必须将某些内容保存到文件中,它才会为您创建。
【解决方案2】:

调用 -dataFilePath 时未创建文件。

要在文件中写入纯字符串,请使用:

NSError *e = nil;
[@"blabla" writeToFile:[self dataFilePath] atomically:YES encoding:NSUTF8StringEncoding error:&e];

NSError *e1 = nil;
NSString *fileContents = [NSString stringWithContentsOfFile:[self dataFilePath] encoding:NSUTF8StringEncoding error:&e1];

两个错误都应该是 nil 并且 fileContents 应该包含原始字符串。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-13
    • 2011-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多