问题标签 [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 回答
214 浏览

objective-c - 无法存档和取消存档文件到文档文件夹

此代码没有给出任何错误,但它没有创建“plist”文件,也没有从中读取。

我编写了一个代码,指定了文件夹的直接路径,它创建并写入文件,尽管它无法从中读取。

下面的代码无法写入或读取文件。

我逐行按照在线说明进行操作。

我复制了确切的Employee.h文件Employee.m,也没有错误。

谢谢您的帮助。

显示NSLog

但是没有创建文件。

0 投票
0 回答
160 浏览

ios - 等到 unarchiveObjectWithData 方法完成

我正在使用archivedDataWithRootObject: / unarchiveObjectWithData : 方法来序列化/反序列化与要从我的应用程序中的设备加载的图像相关的字符串列表。

所以当unarchiveObjectWithData方法执行时:

它将调用initWithCoderPicture 类中的方法对每张图片进行反序列化。此方法从指定的 URL 检索资产:

打了个断点self.picture = asset;,看到图片检索成功。

然后,在unarchiveObjectWithData方法调用之后,我想在UIImageViews. 但是我看到在成功检索图片之前,UIImageViews 已显示在屏幕上。所以 UIImageViews 总是空的。

在显示图像之前,我会等待unarchiveObjectWithData方法完成。

我试图做类似的事情:

但它不起作用。

有什么建议么 ?

0 投票
2 回答
261 浏览

objective-c - 取消归档自定义类时出现 NSInvalidUnarchiveOperationException

编辑:通过添加QCAnnonce* a = [[QCAnnonce alloc] init];在函数调用之前的某个地方添加我的代码,我解决了这个问题,所以我猜我“将类引入了运行时”。但是我现在有一个警告说“a”未使用,那么是否有一个运行时函数可以用来“将类引入运行时”?

我正在尝试创建一个客户端-服务器应用程序。使用 NSKeyed(Un)Archiver 归档和取消归档对象以进行传输。我的大多数对象都可以毫无问题地传输,但其中一个会引发 NSInvalidUnarchiveOperationException。

在我放置在 initWithCoder: 中的断点之前调用了异常。

我曾尝试在发送之前存档/取消存档,并且效果很好,因此它不应该是 initWithCoder 的问题。

我试图在我的服务器应用程序中创建一个客户端(而不是在作为我的客户端的单独应用程序中),他可以解码该对象。除了他们不在同一个应用程序中之外,我看不出我的客户和这个新客户之间有任何区别。

我最好的猜测是苹果文档的这一部分:

例如,委托可以加载一些代码以将类引入运行时并返回该类,或者替换一个不同的类对象。如果委托返回 nil,取消归档中止并且该方法引发 NSInvalidUnarchiveOperationException。

但我不知道“将类引入运行时”是什么意思。

以下是用于编码/解码的对象方法:

这是异常消息:

0 投票
1 回答
328 浏览

ios - NSKeyedUnarchiver SKSpriteNode 未显示

当我从保存状态恢复时,我的 SKSpriteNode 没有出现在视图中。

在保存和恢复过程中没有错误或警告。

我正在使用以下代码保存我的播放器类:

我的播放器类具有以下编码器/解码器:

然后我使用以下代码恢复我的播放器:

问题是播放器精灵在恢复后不可见。然而,点击屏幕,玩家跳跃(视图上下移动)、挥剑(存在音效)和发射导弹(导弹可见且移动)——所有 3 个动作都是从玩家类启动的。我只是看不到玩家精灵。

编辑:添加视频

播放器类初始化视频

从保存状态恢复播放器类的视频:

0 投票
1 回答
366 浏览

objective-c - 检索数据时 NSKeyedUnarchiver unarchiveObjectWithFile decodeBytesForKey EXC_BAD_ACCESS code=1

我需要一些关于使用 NSKeyedUnarchiver unarchiveObjectWithFile decodeBytesForKey 的帮助。我似乎正确地编写了所有内容,但读取数据给了我一个 EXC_BAD_ACCESS 错误。我正在尝试反序列化数据,并且对那里的各种答案和示例感到困惑。有人可以指出我做错了什么吗?

如果我注释掉数据的编码器和解码器行,我会为其他所有内容返回正确的值,但我也需要数据。

0 投票
1 回答
274 浏览

ios - 未调用自定义 NSObject iniWithCoder

我有一个自定义对象 ,LevelContent其中包含一些属性。LevelContent符合NSCoding,我已经实现了encodeWithCoder:initWithCoder:方法。我将数据保存并获取到 Parse.com。保存工作正常,如下所示:

当我获取数据时,我得到了NSData正确的,但是当我尝试LevelContent用下载的数据初始化时,initWithCoder:永远不会被调用。我尝试LevelContent用这个加载:

这是编码/解码的代码

0 投票
1 回答
2590 浏览

cocoa-touch - NSKeyedArchiver unarchiveObjectWithFile 崩溃与 EXC_BAD_INSTRUCTION

我有以下代码,用于获取已归档对象的路径

当我运行此代码时,它在NSSearchPathForDirectoriesInDomains调用时崩溃并显示 lldb

在 Xcode 的变量视图中,我看到了我所期望的路径字符串集。在 Swift 中获取用于归档/取消归档对象的用户目录的正确方法是什么?

更新

看来这实际上在我使用 NSKeyedUnarchiver 时崩溃了:

秒表是一个实现 NSCoding 的类,秒表是执行取消归档的视图所拥有的数据源(一个秒表数组)。

更新 2

归档的对象图是一个秒表数组。NSCoding 实现如下:

更新 3expandTilde设置为 true 我的路径是/Users/Justin/Library/Developer/CoreSimulator/Devices/FF808CCD-709F-408D-9416-E‌​E47B306309D/data/Containers/Data/Application/B39CCB84-F335-4B70-B732-5C3C26B4F6AC‌​/Documents/ArchivePath

如果我设置expandTilde为false,我不会崩溃,但是文件没有归档和取消归档,路径是@"~/Documents/ArchivePath"

删除应用程序文件夹会导致应用程序的首次启动不会崩溃,但不允许之后重新打开。此外,在删除应用程序文件夹后,我现在可以读取 lldb 中的存档路径,而不必打印它。

0 投票
1 回答
3989 浏览

swift - NSKeyedUnarchiver fails to decode a custom object in swift

I'm trying a basic implementation of the NSCoding protocol in swift, but it seems I can't success to unarchive an object after it has been correctly archived.

Here's my attempt

Running this in the playground, it launches an exception on the last line. Here's the details

The encoding works fine, as encodedUser is a valid instance of NSData (NSConcreteMutableData, to be precise).

Is this some sort of interoperability bug of Cocoa API in swift or am I implementing the NSCoding protocol wrong?

0 投票
1 回答
791 浏览

ios - NSUserDefaults 因 EXC_BAD_INSTRUCTION 而崩溃

我的应用程序与EXC_BAD_INSTRUCTION(code=EXC_i386_INVOP, subcode=0x0). 控制台记录(lldb). 我正在尝试NSUserDefaults使用NSKeyedArchiverand NSKeyedUnarchiver。我试图序列化的类是 的子类NSManagedObject,所以我不能直接序列化它(实际上我可以,但我不能反序列化它,因为它需要一个NSManagedObjectContext)。但实际上,如果有办法直接序列化类,请这么说=)

为了解决这个问题,我创建了一个与对象具有相同属性的 NSDictionary,然后对其进行序列化。就是这样:

然后反其道而行之。当从标准用户默认值中检索数据时,此代码在第二行崩溃:

0 投票
2 回答
1172 浏览

ios - NSKeyedArchiver 不持久化数据

因此,我的应用程序查询了一个 Amazon Dynamo DB 数据库并检索了几千字节的数据。我希望应用程序做的是第一次下载所有内容,然后每次下载一个时间戳,看看它是否有最新版本的数据。所以我只需要每隔一段时间下载一次数据,我正在尝试使用 NSKeyedArchiver 来存档我正在下载的数组。我已经尝试了这三种不同的方法,但它们都不能在 iPhone 上运行,尽管其中两种可以在模拟器上运行。

这不适用于模拟器或实际的 iphone。这种方法的结果是否定的。

我使用的下一件事是完整路径:

这适用于模拟器,但不适用于 iPhone。我的猜测是,编译时,文件系统看起来不同(并且显然没有相同的路径)。所以接下来我尝试了:

再一次,这在模拟器上有效,但在 iphone 上失败。在写入存档之前,我已经确认所有数据都在 self.dataArray 中,并在写回存档后确认数组为零(在 iphone 版本中)。有什么想法吗?有没有更好的方法来做文件路径?