问题标签 [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 投票
1 回答
88 浏览

ios - Is it possible to crash when I unarchive a file while deleting it?

For example

and somewhere else is going to delete this file by removeItemAtPath, whether it is safe to do that? as I know, if I write an object to the file with archiver and I modify that object meanwhile, it will cause crash, but I don't understand the essence of the that, so I wonder what will happen if I operate like this.

0 投票
0 回答
683 浏览

objective-c - NSKeyedArchiver archivedDataWithRootObject:不更新对象?

我已经关注了其他一些线程,并成功地将自定义对象保存/加载到NSUserDefaults使用NSCoding协议中。但是,奇怪的是:我无法更新对象。

这是一些代码块(注意:XUtil objectForKey:并且setObject:forKey:只是从执行加载/保存NSUserDefaults

接下来,执行更新其属性,然后:

所以经过几次尝试,我发现 KeyArchiver 有问题

首先,加载对象,罚款(name = @"ObjectName")。更新属性 ( self.name = @"New Name")。打电话[self saveToDefault]

我将调试archivedDataWithRootObject:self放在第二个块之后:

所以 keyArchiver 不会更新属性,但我不确定下一步该做什么。

编辑5

一天后,尝试了各种可能的方法,我变得如此绝望,将整个NSCoder对象转换为NSDictionary并毫无困难地保存。无论如何,使用这个“将自定义对象保存到NSUserDefault”有什么意义......人们,请给我这个问题的启示。

0 投票
1 回答
66 浏览

ios - NSKeyedUnarchiver 不适用于在不同应用程序中制作的文件

我有两个共享绘图画布的应用程序,我们称一个“子”和另一个“父”。

他们都对自己的图纸进行编码并将其上传到 Parse。当他们共享同一张图纸时,实际上是他们各自的图纸相互叠加。

我遇到的问题是他们无法解码对方的绘画。他们能够自己解码,并且对绘图画布和编码/解码过程使用完全相同的类结构。

虽然这是两个独立的应用程序(因为它们的构建方式不同) - 是否有可能将有关应用程序 ID 的某些内容编码到 NSData 文件中?

0 投票
3 回答
942 浏览

swift - 如何将代表与 NSKeyedUnarchiver 一起使用?

我正在使用 NSKeyedUnarchiver 取消归档对象并想使用委托 (NSKeyedUnarchiverDelegate),但我的委托没有被调用。归档和取消归档工作正常,但未调用委托 (unarchiver & unarchiverDidFinish)。有人可以帮忙吗?

我有以下实现:

以下委托(也在我的 Blobhandler 中实现)永远不会被调用:

0 投票
1 回答
242 浏览

swift - 如何实现 unarchiver 委托以覆盖类名?

  • 我的 IOS-App 有 2 个目标:MYAPPTARGET_1 和 MYAPPTARGET_2
  • MYAPPTARGET_1 正在使用 NSKeyedArchiver 将 Stream 写入 BLOB
  • MYAPPTARGET_2 正在使用 NSKeyedUnarchiver 从 BLOB 中读取流

从我的 MYAPPTARGET_2 中的 BLOB 取消归档流时,我收到错误:016-01-18 15:01:38.541 WorldHistoryAtlasTest[598:9405] * 由于未捕获的异常“NSInvalidUnarchiveOperationException”而终止应用程序,原因:'* -[NSKeyedUnarchiver decodeObjectForKey:]: 无法为键(rootobject)解码类(MYAPPTARGET_1.MapTheme)的对象;

所以它似乎显然是用MYAPPTARGET_1的前缀编码的,并且不能从MYAPPARGET_2读取。

因此,我在另一个 STACKOVERFLOW 答案中得到了克服这个问题的提示,以使用委托解档器覆盖类名。但我无法实现这一点:

我有一个目标名称为 MYAPPTARGET_1 的应用程序,我使用 NSKeyedArchiver 功能将一些数据存储为 blob。

然后稍后使用名为 MYAPPTARGET_2 的第二个 Apps-Target 尝试再次读取数据。从存储在 DB 中的 BLOB 加载。

如果有人能给我一个实用的提示,我会很高兴。

0 投票
1 回答
100 浏览

ios - 如果归档值不存在,则通过覆盖 getter 从 NSUserDefaults 加载归档值

如果未设置属性,我正在尝试添加一个后备函数来加载类的存档副本。

我已经让 setter 工作正常,以便它存储值(并且所有 NSCoding 都按预期工作),但是如果我尝试在其他任何地方引用它,而不是使用实际的变量属性,它总是从 NSUserDefaults 加载。

这是我到目前为止所得到的:

0 投票
1 回答
976 浏览

ios - NSKeyedArchiver 会覆盖以前的存档值吗?

我正在使用以下内容进行IOS App数据备份

  • NSKeyedArchiver.archiveRootObject()
  • NSKeyedUnarchiver.unarchiveObjectWithFile()

基于此处的 Apple 文档 -

我在这里很好奇一个可能很愚蠢的问题 - 每次进行新保存时都会删除以前的存档吗?

问题

  • 调用 NSKeyedArchiver.archiveRootObject() 时,新存档是否会覆盖以前的存档值?
  • 如果它不覆盖旧值,您是否需要删除旧值?

这是删除 NSKeyedArchiver 值的有用参考

0 投票
1 回答
157 浏览

ios - 重新打开后应用程序崩溃

基本上每次我关闭并重新打开应用程序时,当我打开历史选项卡时它都会崩溃。我很确定这是因为我如何使用 NSUserDefaults。谁能指导我完成?

我注意到的是,有时它会在重新打开后打开“历史记录”选项卡,但是如果我向 Nsuserdefaults 添加一个新条目,它会崩溃,在我重新打开它后它会正常工作并显示上一个条目,或者它将删除所有内容并保留新条目只要。

我想我刚刚意识到我的阵列在应用程序关闭后重新启动。这就是为什么桌子崩溃了,因为它超出了界限..

这是我保存数组的另一个文件。

0 投票
2 回答
42 浏览

ios - NsUserDefualts 无法正常运行

基本上我有一些关于 tableView 的错误,我注意到我的 tableView 并不总是正确更新,我尝试调试它,我注意到 tableView 类并不总是被调用来更新表。我究竟做错了什么 ?当我向我的表添加新条目时,计数 4 + 1,我转到历史选项卡,没有任何反应,它显示为计数仍为 4,但如果我再切换选项卡 1 次,它将显示计数为 5,tableView 将是更新了..所以由于某种原因更新有延迟,我可以添加一个刷新按钮,但我不想这样做..

0 投票
1 回答
478 浏览

ios - 如何使用 [NSKeyedUnarchiver unarchiveObjectWithFile] 防止损坏的文件崩溃?

我有一个 ObjC iOS 应用程序,我在其中存档/取消存档数据。有问题的数据来自配套服务器。每个用户获得一组不同的数据。

虽然我从未收到过用户投诉,但我看到 Crashlytics 在这条线上报告了极少数的崩溃:

崩溃细节:

崩溃发生在大约 0.002% 的会话中,但在少数未知用户中最常见。

我发现了这个相关问题:Archiving / Unarchiving results in initForReadingWithData incomprehensible archive。讨论为原因提供了两种合理的理论;一个是存档包含字符“bplist”(听起来很合理),另一个涉及存档的大小(不太可能给定典型的数据集大小)。

我正在寻找有关如何检测这种情况并以某种方式避免崩溃的建议。NSKeyedArchiver 似乎没有返回错误的方法 - 失败的存档是崩溃。

理想情况下,我更喜欢一些机制来在问题发生之前检测到问题的根本原因。这个问题的频率并不能证明我编写自己的存档解析器是合理的,也不能证明添加任何将由所有用户执行的疯狂内容的风险是合理的。

我避免@try在练习中遇到障碍。显然这是一种可能。该应用程序读取此存档的频率远高于写入,因此我的想法是@try在写入后尝试读取(在 a 内),如果读取失败,请执行一些操作以将状态详细信息报告给我。我还需要找到另一种方法来为这些用户缓存数据,但这很容易。