【问题标题】:Possible to reliably open AND edit an NSKeyedArchiver's archive?可以可靠地打开和编辑 NSKeyedArchiver 的存档吗?
【发布时间】:2009-12-09 20:30:48
【问题描述】:

我正在使用类似下面的代码将对象的 NSDictionary 保存到设备。有没有办法打开这个存档,深入到它包含的字典项目,理想情况下,编辑数据?我的猜测是不,不可靠,因为保存时完成的优化使存档难以解释......至少在使用 Property List Editor 之类的东西打开时看起来是这样。例如,如果我的一些对象共享一个类似的 NSString,那么看起来所说的 NSString 只归档一次......改变了 NSDictionary 的结构,而不是我所期望的。

- (BOOL)writeDataToFile {
 NSMutableData *data = [[NSMutableData alloc] init];
 NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
 [archiver encodeObject:myDictionary forKey:kDataKey];
 [archiver encodeInteger:kDataFileVersion forKey:kDataVersionKey];
 [archiver finishEncoding];
 BOOL success = [data writeToFile:[self dataFilePath] atomically:YES];
 [archiver release];
 [data release];
 return success;
}

【问题讨论】:

    标签: cocoa cocoa-touch nskeyedarchiver


    【解决方案1】:

    真正的问题是“你应该吗?” ... 可能不是。

    当然,您可以解析文件格式,但该格式是一个可能更改的实现细节,而且不值得。

    你为什么要这样做?您是否尝试像 Core Data + sqlite 那样进行增量编辑?普通的旧 sqlite 本身会解决您的问题吗?

    【讨论】:

    • 我只是好奇我是否忽略了或不知道某些可以解析这些文件的事物 或某些工具。为什么?主要用于测试应用程序如何响应存档中不同类型的数据。与 CD 或 SQLite 无关。
    • 这是对有效请求的相当无益的回答。例如,我需要比较这种 plist 文件的两个版本(即 Xcode 的核心数据模式编辑器创建的“布局”和“元素”文件。在这种情况下,比较原始 plist 文件,即使变成文本 plist , 效果不佳,因为即使对模型进行了很小的更改,许多 ID 也可能已更改。我需要查看这些存档对象的对象布局,以了解实际更改了什么。
    • 事实上,这些文件的实际内部编码是一个实现细节,可能会从一个操作系统版本更改为下一个操作系统版本。不太可能,但是尝试手动解析它是一个坏主意,并且尝试再次将其写回是完全愚蠢的。您需要提前了解数据结构及其键的名称,以便有机会安全地执行此操作。即使这样,解压缩它的 real 类也可能在内部对为该类的早期版本创建的存档做一些事情。 坏主意。
    猜你喜欢
    • 2014-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-30
    • 1970-01-01
    • 2010-11-30
    • 1970-01-01
    相关资源
    最近更新 更多