问题标签 [nscoder]

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 回答
3242 浏览

objective-c - 编码 NSAttributedString 引发错误

根据这个问题的公认答案,我编写了以下代码:

其中 ts 是一个 NSAttributedString ,其中填充了一些文本和一些属性(在本例中为颜色)。

当我执行此代码时,我收到此错误:

我是 NSCoder 领域的新手,但上述问题的答案让我觉得这就是我所要做的。是吗?我错过了什么?


编辑:

在这种情况下,无法识别的选择器被发送到 NSAttributedString 中的颜色属性。当我像这样初始化字符串时:

字典是这样构建的:

字典的 NSLog 产生了这个:

上面的 CGColor 的地址与错误消息中的地址匹配。

0 投票
1 回答
132 浏览

objective-c - 尝试使用 NSCoder 会使应用程序在启动时崩溃

我在 NSDictionary 中存储了一些详细信息。我在 iPad 上使用 Master-Detail 视图,添加 initWithCoder 方法后,我的应用程序在启动时崩溃,我不知道如何使其工作。

我想使用 NSCoder 的原因是存储我的用户的数据,并且一旦他再次启动应用程序就能够显示它。NSUserDefaults 不可行,因为我将 UITextFields 和 UISegmentedControls 存储在字典中以便于处理数据。

谁能告诉我如何正确使用它?

0 投票
1 回答
221 浏览

objective-c - 保存使用 NSCoder 编码的数据

我正在使用 NSCoder 对一些 NSDictionary 进行编码,并且我想以某种方式将其保存在应用程序中。谁能告诉我我该怎么做?

我想让用户能够在打开应用程序时查看他之前所做的事情。

0 投票
1 回答
259 浏览

cocoa - 如何使用 NSCoding 对 unichar 数组进行编码

我的自定义对象包含一组unichar原语。但是 NSCoder 中没有encodeUnichar:ForKey方法。我的解决方案是将我的二维unichar数组转换为一个NSString然后对其进行编码。

但是,缺少对字符进行编码的方法让我觉得我错过了一些明显的东西,尤其是因为我在 Stack Overflow 上找不到答案。

在我开始我的 NSString 方法之前,有谁知道是否有一种更简单的方法可以在 NSCoding 协议中内置?

谢谢李。

0 投票
2 回答
2208 浏览

objective-c - 通过 NSStream 发送时数据被截断

好的,所以我整天都在处理这个错误,我想我已经把它缩小到了根本问题。

背景:

我正在开发一个应用程序,该应用程序要求我编写自己的版本,NSNetServiceNSNetServiceBrowser允许在 iOS 5 中通过蓝牙使用 Bonjour。这是一次很棒的冒险,因为在开始这个项目之前我对网络编程一无所知。我从各种示例项目和经典的Unix 网络编程教科书中学到了很多东西。我的实现主要基于 Apple 的DNSSDObjects示例项目。一旦解决了服务,我添加了代码以实际建立设备之间的连接。AnNSInputStream和 anNSOutputStream是通过 获得的CFStreamCreatePairWithSocketToHost( ... )

问题:

我正在尝试通过此连接发送一些数据。数据由一个整数、几个NSStrings和一个NSData用 存档的对象组成NSKeyedArchiver。的大小NSData约为 150kb,因此整个消息的大小约为 160kb。通过连接发送数据后,当我尝试取消归档时出现以下异常...

经过进一步探索,我注意到接收到的数据只有 2kb 左右。消息被截断,从而使存档“难以理解”。

可能相关的代码:

将数据发送到所有连接设备的方法

Peer 类中实际写入数据的方法NSOutputStream

用于处理流事件(“接收”数据)的 NSStreamDelegate 方法

此代码中的缓冲区大小为 32768 b/c,这就是我从中学到的任何示例代码中的内容。它是任意的吗?我尝试将其更改为 200000,认为问题只是缓冲区太小,但它没有改变任何东西.. 我不认为我完全理解发生了什么。

0 投票
1 回答
370 浏览

ios - iOS:归档 NSMutableArray

我已经用谷歌搜索并搜索了这个,但没有直接的结果。看来我对 Apple 文档中的以下内容存在根本性的误解:

存档可以存储任意复杂的对象图。存档保留了图中每个对象的身份以及它与图中所有其他对象的所有关系。未归档时,重建的对象图应该是原始对象图的精确副本,除了少数例外。

假设我有一个对象NSMutableArray集合Person。每个Person对象都实现initWithCoderencodeWithCoder。此外,任何给定的对象Person都可能具有 的一个NSMutableArray(类似地兼容编码)Task

我的理解是有一种归档方式,从而触发任意深度的级联序列化,具体取决于编码协议的实现。所以在我的视图控制器中,我有一个willEnterBackground

我有一个viewDidLoad这样做的:

这一切都会发生,但有两件事:

  1. 数组包含的对象中的initWithCoderand永远不会被调用。encodeWithCoderpeople
  2. 不出所料,结果是self.people一个大小为 0 的 NSMutableArray。令人惊讶的是,未归档的数据有 252 个字节长,看起来差不多。

建议?提示?

0 投票
1 回答
142 浏览

colors - 使用 NSCoder 保存颜色?

如何使用 NSCoder 保存(我的意思是编码和解码)颜色,例如 ccc3、ccc4 等?

好像不支持。我能够解决它的唯一方法是保存整数,然后当我需要颜色时,我会从整数生成它们。

有没有使用 NSCoder 保存 ccc3、ccc4 颜色的正式方法?

即,我想保存;

但似乎没有办法用 NSCoder 对它们进行编码或解码。

谢谢

0 投票
1 回答
1719 浏览

objective-c - 如何调用encodeWithCoder

可能是一个nooby问题 - 怎么encodeWithCoder称呼?我需要使用它来将对象保存在 iphone 上的文件中,我只是不确定它的实际调用方式。我必须手动调用它吗?如果是这样,我将使用什么作为NScoder参数的输入?

0 投票
1 回答
121 浏览

nsstring - NSString 无法解码类版本 XXXX

我正在实现自己的键控NSCoder子类,并且 NSString 的解码失败。

如果我执行以下操作:

然后抛出以下“未捕获的异常”:

我认为12345 来自此方法的位置MyUnarchiver

同样,如果我们抛出一个nil NSCoderat NSStringinitWithCoder:那么我们会得到与上面相同的错误,但版本号是 0。

我怀疑这可能与我不知道我应该在该versionForClassName:方法中实现什么这一事实有关。即使从档案和序列化:子类化 NSCoder参考资料中我也无法收集到太多信息。

0 投票
1 回答
601 浏览

ios - 如何将 NSCoder 与版本化类一起使用

当对象的属性在归档和取消归档过程之间发生变化时,我对 NSKeyedArchiver 和 NSKeyedUnarchiver 有点挣扎。这是一个具体的例子:

我有一个类,比方说Task,它有属性nameand desc,两者都是 type NSString。现在,我使用存档NSKeyedArchiver archivedDataWithRootObject并将其写入文件。稍后我可以从文件中读取它并使用它NSKeyedUnarchiver unarchiveObjectWithData(data)来回到我想要的位置。当Task获得一项新财产并且为了使事情变得有趣而失去一项时,问题就来了。

所以现在,Taskhas name,这是一个NSString,但是desc不见了。此外,我添加了dateDuetype的属性NSDate。然后启动模拟器。问题是未归档的是 oldTask具有 olddesc属性,而不是 new dateDue

initFromCoder实际上考虑了当前类中不存在属性并且不尝试对其进行解码的情况。

有没有办法向 NSCoder 方法解释不是像我序列化它时那样创建对象的精确副本(我意识到这是序列化/反序列化定义的一部分),而是允许我灵活地版本它?

谢谢