【问题标题】:How to save a NSMutableDictionary into a file in documents?如何将 NSMutableDictionary 保存到文档中的文件中?
【发布时间】:2011-09-19 23:22:05
【问题描述】:

我想将 NSMutableDictionary 对象的内容保存到文件中。我该怎么做呢 ?我已经知道如何使用 NSDictionary 对象执行此任务,但我不知道如何将此 NSMutableDictionary 转换/复制到 NSDictionary...除非有一种方法可以将 NSMutableDictionary 的内容直接写入文件...我强调NSMutableDictionary 对象包含 NSDictionary 类型的对象。

感谢您的帮助,

斯蒂芬

【问题讨论】:

    标签: iphone ios ios4 nsdictionary nsmutabledictionary


    【解决方案1】:

    NSMutableDictionary 是NSDictionary 的子类:你可以在任何你想使用NSDictionary 的地方使用它。从字面上看,只需将对象传递给您现在用于NSDictionary 的相同代码即可。

    从更一般的意义上说,如果您真的需要从 NSMutableDictionary 获得真正不可变的 NSDictionary,只需在 NSMutableDictionary 上调用 copy。

    其他方法包括[NSDictionary dictionaryWithDictionary:] 或[NSDictionary alloc] initWithDictionary:],它们本质上都是一样的。

    【讨论】:

    • 我不确定 writeToFile:atomically 将直接在 NSMutableDictionary 对象上工作。这只是一个示例,表明我们不能在任何使用 NSDictionary 的地方使用 NSMutableDictionary
    • 绝对可以。为什么你会有其他想法?我想不出你会对 NSDictionary 进行的任何操作在尝试使用 NSMutableDictionary 时会失败。无论如何,正如我所提到的,如果有理由,您可以使用 [myMutableDict copy] 或 [NSDictionary dictionaryWithDictionary:myMutableDict] 从一种类型转换为另一种类型。
    • NSMutableDictionary 的副本不会生成真正的 NSdictionary,因为您将 NSMutableDictionary 的副本保存到 NSUserdefaults 中,保存失败,因为它不是属性值(NSDictionary(
    【解决方案2】:

    如果您只是转向NSDictionary 文档。您将看到有一种将字典保存到文件的方法

    writeToFile:atomically:

    将字典内容的属性列表表示写入给定路径。

    - (BOOL)writeToFile:(NSString *)path atomically:(BOOL)flag
    

    参数

    路径: 写入文件的路径。 如果 path 包含波浪号 (~) 字符,则必须在调用此方法之前使用 stringByExpandingTildeInPath 展开它。

    标志: 一个标志,指定文件是否应该以原子方式写入。

    如果 flag 为 YES,则将字典写入辅助文件,然后将辅助文件重命名为路径。如果 flag 为 NO,则直接将字典写入路径。 YES 选项保证即使系统在写入过程中崩溃,路径(如果存在)也不会损坏。

    返回值

    如果文件写入成功则为YES,否则为NO。

    此方法在写出文件之前递归地验证所有包含的对象都是属性列表对象(NSData、NSDate、NSNumber、NSString、NSArray 或 NSDictionary 的实例),如果所有对象都不是属性列表对象,则返回 NO ,因为生成的文件不是有效的属性列表。

    如果字典的内容都是属性列表对象,则该方法写入的文件可以通过类方法dictionaryWithContentsOfFile:或实例方法initWithContentsOfFile:来初始化一个新字典。

    所以你正在寻找的代码可能是这样的:

    [myDict writeToFile:path atomically:YES]
    

    myDict 是您拥有的字典,path 是您要将其保存到的位置的路径

    【讨论】:

    • 这个方法我已经知道了。我要问的是一种将 NSMutableDictionary 转换为 NSDictionary 以调用 writeToFile:atomically 方法的方法
    • 你不需要强制转换... NSMutableDictionary 是 NSDicitonary 的一个子项。所有适用于 NSDictionary 的函数都适用于 NSMutableDictionary。不过不要混淆,这是一条单行道。采用 NSMutableDicitonary 的函数可能不适用于 NSDicitonary。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-18
    • 2014-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多