问题标签 [nsarchiving]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
3347 浏览

iphone - Using NSCoding on a subclass of custom class

I am using NSCoding to archive/unarchive a custom class as a method of data persistence. It works fine if the object is a subclass of NSObject, but I also have objects that are subclasses of custom objects. Do I need to change the initWithCoder: method as well as encodeWithCoder? Right now, the properties that are specific to the subclass encode/decode fine, but properties the subclass inherit from the superclass do not. Any thoughts? Here is the basic structure:

and the subclass:

0 投票
2 回答
393 浏览

objective-c - 从 NSuserDefaults 取消归档数据的正确方法是什么?

我将一些基于 Objective C 的对象存储到 NSuserdefaults 中。

为了从 NSuserDefaults 中检索数据,我使用了 initWithCoder 方法。

我已经看到了两种不同的实现:

实施1

实施 2

哪个是正确的方法?

这两者有什么区别?

0 投票
2 回答
148 浏览

ios - iOS - 是否有任何框架以 plist 或 xml 形式提供大量任意二进制数据?

我知道出于某些性能原因,将 plist 或 xml 用于大量任意二进制数据并不是一个好主意。

假设我的数据格式是一个数组(一些字符串,一个整数,二进制数据),其中二进制数据的大小超过几兆字节(不固定),并且数组大小是数百个。我想将整个数据序列化并将其存储在我的 Documents 目录上的一个文件中,并仅将其中一些从该文件读取到内存中。所以,我首先认为使用 plist 是一种实现需求的方法,但如上所述,这不是一个好方法。

避免该问题的一种方法是使用二进制数据的路径而不是二进制数据,然后我可以使用 Core Data 或类似的东西。但是,那并不能满足要求。

找了几天合适的框架,好像没有。我应该建立自己的编码和解码方法吗?NSArchiving 是否足以满足我的要求?

0 投票
1 回答
1930 浏览

cocoa - NSKeyedArchiver:区分同一类的不同实例

我正在我的 OS X 应用程序中实现对 Lion 的“恢复”功能的支持。

我有一个 NSViewController 的自定义子类,在其中我实现了方法 encodeRestorableStateWithCoder: 为:

但是,由于我有多个 MyClass 实例,不同的值被保存到同一个键(“object_key”)中,我从 Cocoa 收到以下警告:

NSKeyedArchiver 警告:替换键“object_key”的现有值;类层次结构中的编码键可能重复

克服这个问题的最佳实践是什么?

编辑:我在这里发现每个实例都自动拥有自己的命名空间以避免冲突,所以问题可能在于我手动调用 encodeRestorableStateWithCoder 到具有相同 NSCoder 对象的不同实例而不告诉它这些是不同的实例。但是,我仍然无法弄清楚如何正确地做到这一点。

提前致谢!

0 投票
1 回答
123 浏览

objective-c - 构建自定义 NSArchiver 序列化为字符串

NSArchiver 如何序列化到文件?我假设它是以二进制格式序列化的,对吗?如果我想将它存储在字符串中以便存储到 SQLite 数据库中怎么办?我需要编写自己的自定义 NSArchiver 吗?如果是这样,我该怎么做?那里有教程吗?

ps 我确实意识到 Core Data 可以做到这一点,但让我暂时取消该选项。

0 投票
2 回答
162 浏览

objective-c - 如何获取文件路径?在基于文档的应用程序中加载文档

我希望能够保存和加载文档,所以我尝试使用这些方法:

[NSKeyedArchiver archiveRootObject: rootObject toFile:@"myMap.map"];

rootObject = [NSKeyedUnarchiver unarchiveObjectWithFile:@"myMap.map"];

我打算把什么作为文件参数?我现在只有一个常量字符串,但这意味着我只能加载一个文件,我假设有一种方法可以让用户从打开的面板中选择作为参数,但是如何?

0 投票
1 回答
55 浏览

objective-c - 归档后比较对象

我有一个NSMutableArray自定义对象,它们通过NSArchiver. 我需要能够检索存档作为备份并将其与现有NSMutableArray的应用程序合并。我需要删除应用内NSMutableArray和未存档之间的重复项,但通常使用NSSet或使用比较的方法是isEqualcontainsObject不工作,因为虽然最初相等的对象显然不是在存档后。我可以通过两个数组进行嵌套迭代并比较对象 ivars,但这似乎相当繁重。

有什么我想念的吗。我对 Objective-C 和使用NSArchiver.

0 投票
1 回答
192 浏览

objective-c - 地图坐标不解码

在我的应用程序中,我试图保存地图上的图钉,以便用户在应用程序终止后打开应用程序时它们就在那里。我已经使我的 mkAnnotation 类符合 NSCoding,并实现了两个必需的方法。注释都存储在单例类的 NSMutableArray 中,所以我真的只是想将数组保存在单例类中。一切都被很好地编码,但我认为它们没有被解码。这是一些代码:这是我的 MKAnnotation 类:

这是我的单身课程:

在地图视图控制器上的 viewDidLoad 方法中,我尝试将注释放置在地图上的单例数组中:

0 投票
1 回答
115 浏览

objective-c - 取消归档我的数组后,它突然包含 NSRects 而不是 NSValues。如何找回,

我将 s 包裹NSRectNSValues 中以将它们放入 NSMutableArray。我现在想为我的应用程序添加保存/加载功能,所以我想我会使用NSKeyedArchiverand NSKeyedUnarchiver错误的! NSKeyedArchiver cannot archive structs. 经过一番搜索,我找到了一个有同样问题的人的论坛帖子。他通过使用NSArchiverand解决了这个问题NSUnarchiver。我实现了这一点,但再一次,它没有用。我现在可以对其进行编码,但如果我解码我的数组,我会得到一个NSRects数组!您甚至不能将它们放入数组中!但我不在乎,只要我能恢复我的直肠。但我不能,因为NSArray只有检索对象的方法。结构不是对象,所以我无法检索我的矩形。这怎么可能?如何检索我存档的矩形?

MyDocument.m 的一部分:

包装 NSValues 怎么可能消失,我怎样才能安全地保存和加载我的 NSRects?

0 投票
2 回答
890 浏览

cocoa - 为 Lion 的用户界面恢复功能编码 NSViewController

知道出于恢复(用户界面保留)目的而归档NSViewController窗口内部的最佳实践是什么吗?我已经尝试在窗口控制器的 方法中归档它,只是发现视图控制器在 被调用时没有被取消归档。encodeRestorableStateWithCoder:restoreStateWithCoder:

请注意,此视图控制器包含管理自己的子视图的其他视图控制器,因此需要在NSCoder实例中进行一些范围界定——简单地向下传递提供的coder对象将导致存档中的名称冲突。

提前致谢!