【问题标题】:Content is not retrieved from file未从文件中检索内容
【发布时间】:2010-08-28 19:06:59
【问题描述】:

我遇到了这个有线问题,我无法从文件中获取内容并使用它启动我的 NSMutableArray。

这是我的代码:

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

NSLog(@"Does file exist?: %i", [[NSFileManager defaultManager] fileExistsAtPath:[NSString stringWithFormat: @"%@/length.txt", documentsDirectory]]);

NSMutableArray *tempArr;

tempArr = [[NSMutableArray alloc] initWithContentsOfFile:[NSString stringWithFormat: @"%@/length.txt", documentsDirectory]];

尝试此操作时,initWithContentsOfFile 返回 (null)。检查文件是否存在的行将“1”打印到控制台。

这是我用来保存数据的代码:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
[length.text writeToFile:[NSString stringWithFormat: @"%@/length.txt", documentsDirectory] atomically:NO];

我在不同的程序中使用或多或少完全相同的代码没有问题。

这里真的需要一些帮助,也许我只是暂时失明了......

【问题讨论】:

    标签: ios objective-c iphone file file-management


    【解决方案1】:

    当您尝试从文件的内容创建数组时,the file must be in plist format,并且最外层的 plist 元素必须是 <array>。如果它没有该格式,初始化将失败,您的数组将为nil

    您通过将NSString 写入文件来创建文件,这意味着您可能应该将其读入NSString,而不是NSArray

    【讨论】:

      【解决方案2】:

      NSArray 的 initWithContentsOfFile: 方法的文档说:

      返回值 一个初始化为包含文件内容的数组 由 aPath 指定,如果文件为 nil 无法打开或内容 文件无法解析为数组。 返回的对象可能不同 比原来的接收者。

      您没有在代码 sn-p 中包含 length 的声明,但我猜 length.text 返回一个 NSString 对象,而不是 NSArray。因此,您需要使用来自 NSString 而非 NSArray 的 initWithContentsOfFile: 从文件中读取它。

      【讨论】:

      • 谢谢!我没有考虑文件的格式,它们当然是非常不同的。在我复制代码的另一个程序中,我同时使用数组编写和读取。
      • 很高兴它有帮助!有时只需要用一双新的眼光看你的代码。 :)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-09
      • 1970-01-01
      • 2021-02-01
      • 2014-04-27
      相关资源
      最近更新 更多