问题标签 [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.
objective-c - 编码 NSAttributedString 引发错误
根据这个问题的公认答案,我编写了以下代码:
其中 ts 是一个 NSAttributedString ,其中填充了一些文本和一些属性(在本例中为颜色)。
当我执行此代码时,我收到此错误:
我是 NSCoder 领域的新手,但上述问题的答案让我觉得这就是我所要做的。是吗?我错过了什么?
编辑:
在这种情况下,无法识别的选择器被发送到 NSAttributedString 中的颜色属性。当我像这样初始化字符串时:
字典是这样构建的:
字典的 NSLog 产生了这个:
上面的 CGColor 的地址与错误消息中的地址匹配。
objective-c - 尝试使用 NSCoder 会使应用程序在启动时崩溃
我在 NSDictionary 中存储了一些详细信息。我在 iPad 上使用 Master-Detail 视图,添加 initWithCoder 方法后,我的应用程序在启动时崩溃,我不知道如何使其工作。
我想使用 NSCoder 的原因是存储我的用户的数据,并且一旦他再次启动应用程序就能够显示它。NSUserDefaults 不可行,因为我将 UITextFields 和 UISegmentedControls 存储在字典中以便于处理数据。
谁能告诉我如何正确使用它?
objective-c - 保存使用 NSCoder 编码的数据
我正在使用 NSCoder 对一些 NSDictionary 进行编码,并且我想以某种方式将其保存在应用程序中。谁能告诉我我该怎么做?
我想让用户能够在打开应用程序时查看他之前所做的事情。
cocoa - 如何使用 NSCoding 对 unichar 数组进行编码
我的自定义对象包含一组unichar
原语。但是 NSCoder 中没有encodeUnichar:ForKey
方法。我的解决方案是将我的二维unichar
数组转换为一个NSString
然后对其进行编码。
但是,缺少对字符进行编码的方法让我觉得我错过了一些明显的东西,尤其是因为我在 Stack Overflow 上找不到答案。
在我开始我的 NSString 方法之前,有谁知道是否有一种更简单的方法可以在 NSCoding 协议中内置?
谢谢李。
objective-c - 通过 NSStream 发送时数据被截断
好的,所以我整天都在处理这个错误,我想我已经把它缩小到了根本问题。
背景:
我正在开发一个应用程序,该应用程序要求我编写自己的版本,NSNetService
并NSNetServiceBrowser
允许在 iOS 5 中通过蓝牙使用 Bonjour。这是一次很棒的冒险,因为在开始这个项目之前我对网络编程一无所知。我从各种示例项目和经典的Unix 网络编程教科书中学到了很多东西。我的实现主要基于 Apple 的DNSSDObjects
示例项目。一旦解决了服务,我添加了代码以实际建立设备之间的连接。AnNSInputStream
和 anNSOutputStream
是通过 获得的CFStreamCreatePairWithSocketToHost( ... )
。
问题:
我正在尝试通过此连接发送一些数据。数据由一个整数、几个NSStrings
和一个NSData
用 存档的对象组成NSKeyedArchiver
。的大小NSData
约为 150kb,因此整个消息的大小约为 160kb。通过连接发送数据后,当我尝试取消归档时出现以下异常...
经过进一步探索,我注意到接收到的数据只有 2kb 左右。消息被截断,从而使存档“难以理解”。
可能相关的代码:
将数据发送到所有连接设备的方法
Peer 类中实际写入数据的方法NSOutputStream
用于处理流事件(“接收”数据)的 NSStreamDelegate 方法
此代码中的缓冲区大小为 32768 b/c,这就是我从中学到的任何示例代码中的内容。它是任意的吗?我尝试将其更改为 200000,认为问题只是缓冲区太小,但它没有改变任何东西.. 我不认为我完全理解发生了什么。
ios - iOS:归档 NSMutableArray
我已经用谷歌搜索并搜索了这个,但没有直接的结果。看来我对 Apple 文档中的以下内容存在根本性的误解:
存档可以存储任意复杂的对象图。存档保留了图中每个对象的身份以及它与图中所有其他对象的所有关系。未归档时,重建的对象图应该是原始对象图的精确副本,除了少数例外。
假设我有一个对象NSMutableArray
集合Person
。每个Person
对象都实现initWithCoder
和encodeWithCoder
。此外,任何给定的对象Person
都可能具有 的一个NSMutableArray
(类似地兼容编码)Task
。
我的理解是有一种归档方式,从而触发任意深度的级联序列化,具体取决于编码协议的实现。所以在我的视图控制器中,我有一个willEnterBackground
:
我有一个viewDidLoad
这样做的:
这一切都会发生,但有两件事:
- 数组包含的对象中的
initWithCoder
and永远不会被调用。encodeWithCoder
people
- 不出所料,结果是
self.people
一个大小为 0 的 NSMutableArray。令人惊讶的是,未归档的数据有 252 个字节长,看起来差不多。
建议?提示?
colors - 使用 NSCoder 保存颜色?
如何使用 NSCoder 保存(我的意思是编码和解码)颜色,例如 ccc3、ccc4 等?
好像不支持。我能够解决它的唯一方法是保存整数,然后当我需要颜色时,我会从整数生成它们。
有没有使用 NSCoder 保存 ccc3、ccc4 颜色的正式方法?
即,我想保存;
但似乎没有办法用 NSCoder 对它们进行编码或解码。
谢谢
objective-c - 如何调用encodeWithCoder
可能是一个nooby问题 - 怎么encodeWithCoder
称呼?我需要使用它来将对象保存在 iphone 上的文件中,我只是不确定它的实际调用方式。我必须手动调用它吗?如果是这样,我将使用什么作为NScoder
参数的输入?
nsstring - NSString 无法解码类版本 XXXX
我正在实现自己的键控NSCoder
子类,并且 NSString 的解码失败。
如果我执行以下操作:
然后抛出以下“未捕获的异常”:
我认为12345 来自此方法的位置MyUnarchiver
:
同样,如果我们抛出一个nil
NSCoder
at NSString
,initWithCoder:
那么我们会得到与上面相同的错误,但版本号是 0。
我怀疑这可能与我不知道我应该在该versionForClassName:
方法中实现什么这一事实有关。即使从档案和序列化:子类化 NSCoder参考资料中我也无法收集到太多信息。
ios - 如何将 NSCoder 与版本化类一起使用
当对象的属性在归档和取消归档过程之间发生变化时,我对 NSKeyedArchiver 和 NSKeyedUnarchiver 有点挣扎。这是一个具体的例子:
我有一个类,比方说Task
,它有属性name
and desc
,两者都是 type NSString
。现在,我使用存档NSKeyedArchiver archivedDataWithRootObject
并将其写入文件。稍后我可以从文件中读取它并使用它NSKeyedUnarchiver unarchiveObjectWithData(data)
来回到我想要的位置。当Task
获得一项新财产并且为了使事情变得有趣而失去一项时,问题就来了。
所以现在,Task
has name
,这是一个NSString
,但是desc
不见了。此外,我添加了dateDue
type的属性NSDate
。然后启动模拟器。问题是未归档的是 oldTask
具有 olddesc
属性,而不是 new dateDue
。
我initFromCoder
实际上考虑了当前类中不存在属性并且不尝试对其进行解码的情况。
有没有办法向 NSCoder 方法解释不是像我序列化它时那样创建对象的精确副本(我意识到这是序列化/反序列化定义的一部分),而是允许我灵活地版本它?
谢谢