【问题标题】:Writing an array of NSDictionaries to documents?将 NSDictionaries 数组写入文档?
【发布时间】:2012-06-19 14:15:35
【问题描述】:

我正在尝试将 NSDictionaries 的 NSArray 写入文档文件夹。我正在使用

BOOL fileWritten = [favoritesArray writeToFile:fullFileName atomically:NO];
    if (fileWritten == NO) {
        NSLog(@"Writing favoritesFileFailed");
    }

上面一直返回NO。知道为什么这不会写吗?真正奇怪的是几天前同样的代码还在工作。我读到一些东西说 writeToFile 不能处理复杂的对象。 NSDictionary 会是 writeToFile 无法保存的对象吗?

【问题讨论】:

  • 您的字典创建了什么?什么键字典使用?文件路径是否正确?
  • NSDictionary 对象包含哪些对象?我相信归档数组和字典是完全没问题的,但如果它们包含不可归档的对象,那么问题就在这里。

标签: iphone objective-c cocoa-touch nsarray foundation


【解决方案1】:

NSDictionary 本身写入文件不是问题,但它保存的对象可能是。

通过使用简单的属性列表相关的I/O方法,你可以写出类NSArrayNSDictionaryNSDataNSStringNSNumberNSDate以及任意组合的对象(例如,字典数组)。

另外,它不会覆盖现有文件,所以你检查过吗?

【讨论】:

    【解决方案2】:

    是的,如果你有自定义对象,我会做一些 NSCoding 魔术,然后你可以使用 [NSKeyedArchiver archivedDataWithRootObject:favoritesArray]

    因此,您需要确保该数组中的每个自定义类都符合 NSCoding Reference 并且应该可以工作。

    【讨论】:

      【解决方案3】:

      首先检查fullFileName 确实指向文档目录。

      那么请记住,[NSArray: writeToFile:atomically:] 只能写入可以保存在 plist 文件中的数据类型:NSString、NSData、NSDictionary 和 NSArray - 这些将被递归验证!

      【讨论】:

        【解决方案4】:

        尝试用一个简单的对象保存一个简单的数组。也许只有一个数字,看看问题是否仍然存在。如果没有,那么数组中的对象可能需要考虑保存在其他地方。

        您是否尝试将其保存到NSUserDefaults?如果一切都失败了,为什么不试试呢?

        【讨论】:

          猜你喜欢
          • 2020-01-09
          • 2016-03-17
          • 1970-01-01
          • 2012-04-12
          • 1970-01-01
          • 1970-01-01
          • 2019-02-21
          相关资源
          最近更新 更多