问题标签 [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.
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.
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
”有什么意义......人们,请给我这个问题的启示。
ios - NSKeyedUnarchiver 不适用于在不同应用程序中制作的文件
我有两个共享绘图画布的应用程序,我们称一个“子”和另一个“父”。
他们都对自己的图纸进行编码并将其上传到 Parse。当他们共享同一张图纸时,实际上是他们各自的图纸相互叠加。
我遇到的问题是他们无法解码对方的绘画。他们能够自己解码,并且对绘图画布和编码/解码过程使用完全相同的类结构。
虽然这是两个独立的应用程序(因为它们的构建方式不同) - 是否有可能将有关应用程序 ID 的某些内容编码到 NSData 文件中?
swift - 如何将代表与 NSKeyedUnarchiver 一起使用?
我正在使用 NSKeyedUnarchiver 取消归档对象并想使用委托 (NSKeyedUnarchiverDelegate),但我的委托没有被调用。归档和取消归档工作正常,但未调用委托 (unarchiver & unarchiverDidFinish)。有人可以帮忙吗?
我有以下实现:
以下委托(也在我的 Blobhandler 中实现)永远不会被调用:
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 加载。
如果有人能给我一个实用的提示,我会很高兴。
ios - 如果归档值不存在,则通过覆盖 getter 从 NSUserDefaults 加载归档值
如果未设置属性,我正在尝试添加一个后备函数来加载类的存档副本。
我已经让 setter 工作正常,以便它存储值(并且所有 NSCoding 都按预期工作),但是如果我尝试在其他任何地方引用它,而不是使用实际的变量属性,它总是从 NSUserDefaults 加载。
这是我到目前为止所得到的:
ios - NSKeyedArchiver 会覆盖以前的存档值吗?
我正在使用以下内容进行IOS App数据备份
- NSKeyedArchiver.archiveRootObject()
- NSKeyedUnarchiver.unarchiveObjectWithFile()
基于此处的 Apple 文档 -
我在这里很好奇一个可能很愚蠢的问题 - 每次进行新保存时都会删除以前的存档吗?
问题
- 调用 NSKeyedArchiver.archiveRootObject() 时,新存档是否会覆盖以前的存档值?
- 如果它不覆盖旧值,您是否需要删除旧值?
这是删除 NSKeyedArchiver 值的有用参考
ios - 重新打开后应用程序崩溃
基本上每次我关闭并重新打开应用程序时,当我打开历史选项卡时它都会崩溃。我很确定这是因为我如何使用 NSUserDefaults。谁能指导我完成?
我注意到的是,有时它会在重新打开后打开“历史记录”选项卡,但是如果我向 Nsuserdefaults 添加一个新条目,它会崩溃,在我重新打开它后它会正常工作并显示上一个条目,或者它将删除所有内容并保留新条目只要。
我想我刚刚意识到我的阵列在应用程序关闭后重新启动。这就是为什么桌子崩溃了,因为它超出了界限..
这是我保存数组的另一个文件。
ios - NsUserDefualts 无法正常运行
基本上我有一些关于 tableView 的错误,我注意到我的 tableView 并不总是正确更新,我尝试调试它,我注意到 tableView 类并不总是被调用来更新表。我究竟做错了什么 ?当我向我的表添加新条目时,计数 4 + 1,我转到历史选项卡,没有任何反应,它显示为计数仍为 4,但如果我再切换选项卡 1 次,它将显示计数为 5,tableView 将是更新了..所以由于某种原因更新有延迟,我可以添加一个刷新按钮,但我不想这样做..
ios - 如何使用 [NSKeyedUnarchiver unarchiveObjectWithFile] 防止损坏的文件崩溃?
我有一个 ObjC iOS 应用程序,我在其中存档/取消存档数据。有问题的数据来自配套服务器。每个用户获得一组不同的数据。
虽然我从未收到过用户投诉,但我看到 Crashlytics 在这条线上报告了极少数的崩溃:
崩溃细节:
崩溃发生在大约 0.002% 的会话中,但在少数未知用户中最常见。
我发现了这个相关问题:Archiving / Unarchiving results in initForReadingWithData incomprehensible archive。讨论为原因提供了两种合理的理论;一个是存档包含字符“bplist”(听起来很合理),另一个涉及存档的大小(不太可能给定典型的数据集大小)。
我正在寻找有关如何检测这种情况并以某种方式避免崩溃的建议。NSKeyedArchiver 似乎没有返回错误的方法 - 失败的存档是崩溃。
理想情况下,我更喜欢一些机制来在问题发生之前检测到问题的根本原因。这个问题的频率并不能证明我编写自己的存档解析器是合理的,也不能证明添加任何将由所有用户执行的疯狂内容的风险是合理的。
我避免@try
在练习中遇到障碍。显然这是一种可能。该应用程序读取此存档的频率远高于写入,因此我的想法是@try
在写入后尝试读取(在 a 内),如果读取失败,请执行一些操作以将状态详细信息报告给我。我还需要找到另一种方法来为这些用户缓存数据,但这很容易。