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

swift - [NSKeyedUnarchiver init]:尝试保存自定义类时无法使用 -init 进行初始化错误

我得到错误:

[NSKeyedUnarchiver init]:尝试加载自定义类时无法使用 -init 进行初始化。

这是我的班级初始化:

这是我的编码器功能

最后我调用加载:

0 投票
1 回答
96 浏览

ios - 是否可以解码包含未知对象的 NSKeyedArchived 集合

我有一组具有不同类 A、B 和 C 的对象(都共享一个共同的超类):

该集合通过 NSCoding 归档和取消归档。 如果其中一个类已从项目中删除,是否有办法部分取消归档此集合

当遇到无法解码的对象时,它似乎decodeObjectForKey:失败并返回一个对象。nil有没有办法只获取能够解码的内容?我理解为什么这种行为对对象有意义,但对集合没有意义。

0 投票
1 回答
439 浏览

ios - 单个自定义对象的 Swift NSCoding 问题

我正在阅读其他一些帖子,但我似乎无法弄清楚为什么在下面使用 NSKeyedUnarchiver 保存到磁盘的对象总是将空行打印到控制台。我的最终目标是使用 NSKeyedArchiver 将单个用户对象存储到磁盘。

我目前正在学习如何使用 Firebase 来存储一些数据。我有一个代表用户的自定义类,如下所示:

在我的注册视图控制器中,我创建用户并使用 Firebase 对用户进行身份验证,没有任何问题。在身份验证块中,我使用上面的第一个自定义初始化程序初始化用户对象。我已经尝试了以下方法来保存它,所以我相信我的问题在于我上面的代码与数据的编码/解码,因为这些都不起作用。

根据来自HackingWithSwift的此链接在本地存档文件。FBPath.shared.docDir 只是一个指向我的文档目录的 NSString 链接。

尝试使用

这没有用,所以我尝试使用来自 Whasssaaahhh 的帖子将其存储到磁盘,这里是 Whasssaaahhh 的帖子。这是实际工作的代码,但存储了一个 emtpy 文件。

在我注册的 VC 中将用户存储到磁盘:

然后尝试访问数据:

见下文编辑这将打印一个空行。我不知道该怎么做才能将此用户保存到磁盘。基于此尝试,尝试将其保存在用户默认值中似乎不是一个好主意,并且它作为单个用户的数据集如此之小,无论如何将数据对象存储在磁盘上都不会受到伤害。只需要弄清楚为什么我不能让它工作。我还尝试将所有实例变量从 let 更新为 var 并将 "" 分配为字符串值。我希望第二双眼睛可以帮助我看到我在这里缺少的东西。提前致谢!

编辑:当我将实例变量更改为 vars 并将它们的值设置为空字符串时,现在该对象没有被返回,并且没有任何内容打印到控制台。如果我将它们改回来,那么即使我没有覆盖描述,用户也会向控制台打印一个空白行。如果我尝试打印实例变量,它也会再次打印一个空字符串。

所以我也决定检查位置。价值观都在那里。只是没有使用 NSKeyedUnarchiver 恢复它们。我打印了文件位置以验证它尝试访问正确的位置并且一切都很好。文档的 XML 在这里没有很好地显示。我是该网站的新手,我不相信我可以上传文件。但我查看了生成的 plist 及其所有内容。我离放弃这一点不远了,只是手动将数据存储到 plist 中。不确定与 NSKeyedArchiver 的好处和使用 NSCoding 相比会导致什么问题

0 投票
1 回答
176 浏览

xcode - 在两个不同的项目中使用一个类:解码器异常

我有一个使用此代码的异常;

控制台中的消息:

无法为键(NS.objects)解码类(MyIOSApp.ExternalProjectClass)的对象;该类可以在源代码或未链接的库中定义'

我在同一个工作场所的 2 个项目中使用“ExternalProjectClass”类。在 MyApp 应用程序(mac 版)中。否则我可以正常使用我的课程,我只有编码问题。

我知道我的英语有多差。我希望有人能帮助我。

问候。

0 投票
1 回答
626 浏览

ios - 如何在新版本上转换 NSKeyedArchiver 对象

我刚刚向应用商店发布了一个应用程序,我的一位顾客告诉我,我应该使用 NSKeyedArchiver 将之前存储为整数的数据类型更改为 Double。

很容易更改应用程序的数据模型,但是当我在测试设备上重新加载应用程序时,NSKeyedUnarchiver 显然不想将 Integer 解码为 Double 并抛出 NSInvalidUnarchiveOperation 异常。

我想知道其他 iOS 开发人员将如何处理这种情况。我不想删除所有用户以前保存的数据,但这是我看到的唯一解决方案。

我的代码发布在下面。我已经评论了一些我尝试无济于事的解决方案

0 投票
0 回答
243 浏览

ios - 在 Swift 中使用 unarchiveObjectWithData 时的不确定行为

我在 Swift 中遇到以下代码问题。我从我的一个应用程序中提取了代码并设置了一个 Playground 来测试它的行为。

有时下面的行会成功,有时会失败:

在 Playground 中的运行之间没有任何变化。

如果有人可以帮助我,将不胜感激。这让我疯狂!

当该行在 Playground 中失败时,它会失败并出现以下错误:

执行被中断,原因:EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0

当我的应用程序中的行失败时,它会失败并出现相同的错误,这会打印在调试控制台中:

致命错误:在展开可选值时意外发现 nil

操场

账户类

卡类

测试

0 投票
2 回答
1477 浏览

arrays - 在 Swift 中的 DocumentDirectory 中归档和取消归档数组

我试图通过执行以下代码在持久内存中保存一个简单的对象数组:

然而,当我在代码中打印恢复的日期时,我发现 nil。
相反,如果我使用 CachesDirectory 数组很快就会恢复正常,
但是当我重新打开应用程序并尝试加载数据时,它就会丢失。持久保存数据的正确方法是什么?

0 投票
3 回答
6400 浏览

ios - 无法解码 Employee 类对象的键(NS.object.0);该类可以在源代码或未链接的库中定义

我试图通过序列化数组将一组“员工”对象 iPhone 传递给 Apple Watch:

并将其反序列化为在 Watch 端:

这是“员工”类:

我是否必须在 Watch 端进行任何更改才能修复此错误?

0 投票
1 回答
613 浏览

ios - NSKeyedArchiver/ NSKeyedUnarchiver iOS 的替代方案

我有一本在存档后写入文件的字典[NSKeyedArchiver archivedDataWithRootObject:dictionary]。我获取文件内容并将存档数据通过多对等设备传输到我的对等设备。然后,在我的对等设备中,我使用[NSKeyedUnarchiver unarchiveObjectWithData:data]. 但是,它在取消归档时返回 nil,尽管其中存在数据。

我怀疑文件中的内容很大。NSkeyedArchiver/有什么替代方案NSKeyedUnarchiver吗?

代码:归档:

转让:

解档:

0 投票
1 回答
322 浏览

ios - 无法使用文件上的 NSKeyedArchiver / NSKeyedUnarchiver 设置/检索数据

我正在尝试使用 NSKeyedArchiver 在 iOS 应用程序上保存一些持久数据以写入文件,并且我想稍后使用 NSKeyedUnarchiver 检索这些数据。我创建了一个非常基本的应用程序来测试一些代码,但没有成功。以下是我正在使用的方法:

我用来测试此代码的类如下:

注意.h

注意.m

我已经看到使用 NSUserDefaults ( https://blog.soff.es/archiving-objective-c-objects-with-nscoding ) 的类似示例,但我想将此数据保存到文件中,因为据我所知 NSUserDefaults主要用于存储用户偏好,而不是一般数据。我错过了什么吗?提前致谢。