问题标签 [nskeyedunarchiver]

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

objective-c - NSKeyedUnarchiver - 需要尝试/捕获?

据我了解,@try/@catch不鼓励使用块,因为exceptions只应在不可恢复的灾难性错误中抛出(请参阅此讨论,@bbum 给出了一个很好的答案:iOS 中的异常处理)。

所以我查看了我的代码,发现了一个@try/@catch我不知道如何摆脱的块:

问题是(如文档中所述)如果不包含有效存档,则会+unarchiveObjectWithData:引发一个。NSInvalidArchiveOperationExceptionNSData

由于数据是由用户选择的文件提供的,因此不能保证它包含有效的存档,因此如果选择了不正确的文件,应用程序将会崩溃。

现在有两个问题:

  1. 如果存档无效(这似乎不符合灾难性或不可恢复的错误),为什么+unarchiveObjectWithData:不只返回nilEdit:和 an )。NSError**
  2. 上面的模式是否正确(使用@try)?我没有发现任何方法可以让我们事先检查数据是否包含有效的存档,并且没有发现使用委托协议处理这种情况的可能性。我忽略了什么?

请注意,上面的代码当然有效,我只是想知道它是否是最佳实践。

0 投票
1 回答
108 浏览

objective-c - 使用 nskeyedarchiver 切换视图时将数据保留在屏幕上

我已经使用 xcode 大约 9 个月了,我即将完成我的应用程序,但有 1 个小问题......

一点背景。我有一个随机吐出一些数据的按钮[在这种情况下是锻炼]。在该窗口中还有一个按钮可以刷新数据并清除标签。

即使用户更改视图或退出应用程序,我也希望将 randomStretchLabel1、randomStretchLabel2 保留在屏幕上。我希望它留在屏幕上,并且只能在用户点击 randomButton 或 clearAllWorkouts 时重新加载。

表视图到stretchViewController的图片

根据建议更改为关注,但仍然没有得到我想要的。当我返回表格视图(存储我所有其他锻炼的地方)时,标签会自行重置。

0 投票
2 回答
126 浏览

ios - 自引用 NSMutableDictionary

说我有这个:

dict我通过调用归档:

然后我稍后取消存档:

问题是dict2[@3]不是dict2,而是未初始化NSDictionary的,我无法恢复我放入的内容。有谁知道我将如何解决这个问题?提前致谢!

0 投票
0 回答
91 浏览

ios - 使用 NSKeyedArchiver 的 TableView 行重复

单击 alertView 按钮后,我正在使用 NSKeyedArchiver 存储 mutableArray

在 viewDidLoad 我把这段代码

问题是我的 tableView 行是数组计数的两倍。tableView 应该只显示这些

但是每次我添加一个播放列表名称时,它都会添加所有这些名称并最后添加名称,并且数组的计数仍然相同,但 tableView 显示的是这样的双

当我打印数组的计数时,它只显示 7。我真的需要你的帮助,我回家了,我很清楚。

0 投票
1 回答
69 浏览

iphone - iPhone - 将数据保存到 plist 文件

我一直在关注本指南,使用 NSCoding 将数据保存到 plist。据我所知,我已逐步按照指南进行操作,并查看了示例代码,但是在实际保存数据时,它似乎并没有保存它,也没有调用保存功能。我通过一个按钮调用保存功能:

因此,当单击按钮时,日志显示为:

所以从那里我在 saveData 函数中设置了以下 NSLog:

从这里开始,这些 NSLog 都没有出现在输出中,我无法弄清楚为什么它没有被正确调用。如果您需要更多信息,请告诉我。

谢谢。

0 投票
1 回答
508 浏览

objective-c - 使用 NSKeyedArchiver 解码然后编码未知类?

我有一个来自 OS X 应用程序的项目文件,它是一个使用 NSKeyedArchiver 生成的 plist。我需要以编程方式更改其中的一个字符串。

基本上,它包含带有 Foundation 类的 NSDictionary 对象。但是有一个自定义类(GradientColor)。我自己定义了它,并尝试在 initWithCoder: 和 encodeWithCoder: 中什么都不做,但目标应用程序在尝试读取新生成的项目文件时崩溃。所以它在初始化时无法正确处理 nil 值。

在使用 initWithCoder:(NSCoder *)aDecoder 初始化它以便将它们编码回原样时,我能否以某种方式知道哪些键对应于我的类?

0 投票
1 回答
135 浏览

cocos2d-iphone - 使用 NSKeyedUnarchiver 加载保存状态时的 EXC_BAD_ACCESS

我对 a 进行了子类化CCSprite以制作一个可以编码和解码的对象。我想保存精灵状态并在特定位置再次加载它。NSKeyedUnarchiver除了用(见loadIconSpriteState下文)解码之外,一切似乎都很好,EXC_BAD_ACCESS下面是代码:

HelloWorldLayer.h

HelloWorldLayer.m:

CCIconSprite 实现:

编码和解码:

HelloWorldLayer 实现:

保存和加载状态:

编辑

设置异常断点后出现以下错误

指向行内:

在里面

CCSprite.m 类的方法。

0 投票
0 回答
5014 浏览

ios - NSKeyedUnarchiver initForReadingWithData:无法理解的存档崩溃

取消归档包含 xml 字符串的文件时出现以下问题。

它在以下行崩溃:

“数据”(27580 字节)来自:

我得到的崩溃:

由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“ * - [NSKeyedUnarchiver initForReadingWithData:]:无法理解的存档(0x62、0x70、0x6c、0x69、0x73、0x74、0x30、0x30)”

该文件是这样创建的:

'convertProject:' 基本上用 xml 内容创建了一个 NSMutableString 并以这种方式将其转换为 NSData('encoding' 是 utf-8):

0 投票
1 回答
434 浏览

ios - NSKeyedArchiver 继承自 NSCoder 时为什么存在 NSKeyedUnarchiver?

为了提供一些背景信息,我是 iOS/Objective-C 的新手,具有 Web 开发(Ruby/JS/C#)背景。我了解这些类是如何工作的,但我不明白为什么最初的实现者编写这两个类 (NSKeyedArchiverNSKeyedUnarchiver) 而不是将编码和解码逻辑合并到一个类中。

阅读抽象类NSCodera的 Apple 文档NSCoder 具有编码和解码的方法。我唯一能想到的是代码很长,所以最初的实现者把它分成了2个......在我看来,开发人员只使用一个类会更方便,但也许我'我错过了一些细微的差别。那么这有什么历史原因吗?NSCoder它定义了编码/解码API,但意味着被分成编码器/解码器,这是一种“方便”吗?我是否误解了 aNSCoder应该做什么?

0 投票
0 回答
60 浏览

ios - NSKeyedUnarchiver 时有机会更新 UIProgressView 吗?

在我的应用程序中,我将数组保存在核心数据中NSKeyedArchiver。然后,我在需要数据时使用以下代码(提供 Core Plot):

这很好用!但是当 dataArray 很大时,它不会花费几秒钟来取消归档。有没有办法在取消归档时更新进度条?提前致谢。