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

ios - 将数据存储在 NSUserdefaults 或 coredata 中?

  1. 我需要在我的应用程序中存储字典它的生命周期应该与存储在 NSUserDefaults 中的数据的生命周期相同。

  2. 实现的方法很少,但我在想core data,NSKeyedArchieverNSUserDefaults

  3. 我会经常更新这些信息,而且字典也不会是一个大数据

  4. 我的问题是哪种方法最好?因为从 NSUserDefault 存储和检索是昂贵的操作。

0 投票
1 回答
103 浏览

objective-c - 如何解压未知对象?

我基于 2 个对象类(classAclassB)为 iPad 创建了两个应用程序。

classA在一个文件中序列化NSKeyedArchiver(然后附加到电子邮件中)。我想classA在使用 的其他应用程序中取消归档该对象classB,而不包括其他应用程序的所有标头。

问题:当我使用 NSKeyedUnarchiver 从 iPad 文件系统(从邮件附件)加载对象时,该函数返回错误(“类无法识别”)。

我尝试过 的:这些项目符号都不适合我.... a) 检查类类型(作为字符串)并转换 objectA。b) 在其他应用程序中包含 objectA 的 .h 定义。

问题: 有没有办法将对象取消归档到通用 ID 对象中?然后设置参数调用例如:

鉴于我知道函数的名称和要设置的参数的名称?

0 投票
5 回答
10620 浏览

ios - 当原始类不可用时如何解码对象?

我有一个 iOS 7 应用程序,它将自定义对象作为文件保存到应用程序的 iCloud Docs 文件夹中。为此,我使用了 NSCoding 协议。

对象序列化在 iOS 7 版本的应用程序中完美运行:

  1. initWithCoderencodeWithCoder

  2. [NSKeyedArchiver archivedDataWithRootObject:person]

  3. person = NSKeyedUnarchiver unarchiveObjectWithData:(NSData *)theData]

但是我需要将此应用程序移至 iOS 8,并且该类将被快速编码并为这个新的 iOS 8 版本的应用程序“重命名”。

当我尝试取消归档对象时,出现以下错误:

我已经尝试将 swift 类“PersonOldVersion”重命名为原始类名(“Person”),但仍然失败。

如何解码原始类不可用的对象?

0 投票
1 回答
396 浏览

ios - 如何知道文件是否已编码?

我在 iCloud 的 Docs 文件夹中有两种类型的文件:

  1. 文本文件
  2. 使用 NSCoding 协议编码的文件

两种类型都使用 .txt 扩展名。如何知道文件是否已编码?

由于我不知道文件是文本文件还是编码文件,所以首先我尝试打开任何文件,就好像它已编码一样,希望在打开的完成处理程序上会捕获任何错误:

当 UIDocument 尝试加载文件的内容时,尝试取消归档文本文件时出现异常:

异常被 触发NSKeyedUnarchiver.unarchiveObjectWithData(contents as NSData),表明存在无效参数:

这个例外是有道理的,因为我正在尝试解码一个文本文件(一个未编码的文件)。问题是我无法迅速捕捉到异常,当我知道该文件不是编码文件时,为时已晚。

如何知道文件是否已编码?检测文件是否已编码并因此进行编码的最佳方法是什么?

谢谢!

****** 解决方案 ******

根据@AlainCollins 的评论,我读取了编码文件的前 4 个字节,因为这将是我的幻数:

然后,我将 Docs 文件夹中每个文件的前 4 个字节与这个幻数进行了比较。

0 投票
1 回答
2906 浏览

swift - 从文件名加载 SpriteKit 关卡

对于我正在创建的游戏,我希望能够创建许多可以轻松加载的自定义关卡。每个级别都应该有一个 .sks 接口文件和它自己的 SKScene 子类 .swift 文件。 代码

现在,这是有效的:

我在哪里创建这样的场景:

但这不适用于大型集合,因为我无法遍历它们的文件夹中的每个级别。我需要这样的东西

我尝试使用这个答案从这样的字符串中获取类,但加载的场景好像它只是一个 SKScene,而不是 Level1 对象。

现在,我将使用它,但我认为这不是最好的方法:

我只是希望能够制作大量易于加载的 SKScene 子类,每个子类都有自己的接口文件。

0 投票
1 回答
1843 浏览

ios - 捕获 NSKeyedUnarchiver 异常

在 Swift 中,NSKeyedUnarchiver.unarchiveObjectWithData(data)如果无法取消归档数据,将引发异常。

在某些情况下,我们无法保证数据是否未损坏,例如从文件读取时。

我不知道 Swift 中的 try/catch 机制,也不知道这样的方法canUnarchive可以帮助防止异常。

除了在 Obj-C 中实现 try/catch 之外,有没有纯 Swift 的解决方案来解决这个问题?

0 投票
1 回答
323 浏览

ios - 如何更好地保存 CLLocation?

我正在尝试保存我的 CLLocation 位置以供将来在我的应用程序中使用。我想出了以下几点:

当我运行我的应用程序时,编译器返回

我究竟做错了什么?还是有更好和标准的方法来保存 CLLocation 数据?

0 投票
1 回答
7632 浏览

ios - Swift - NSMutableArray 中的 NSKeyedUnarchiver unarchiveObjectWithData

如何将对象变成 NSMutableArray ?我归档了 NSMutableArray。

0 投票
1 回答
84 浏览

core-data - 核心数据消息无法找到为名称注册的 NSValueTransformer 实例:NSKeyedUnarchiveFromDataTransformerName

我正在使用 Core Data 来存储 NSAttributedString 并使用可转换字段来存储数据。但是,我从 Core Data 收到以下消息,尽管一切似乎都正常。我怎样才能摆脱该消息,或者我可以安全地忽略它。

0 投票
1 回答
469 浏览

ios - 如何在 NSHomeDirectory() 下持久化文件?

我正在使用NSKeyedArchiverNSKeyedUnarchiver为我的应用程序实现缓存功能。

为了在应用程序每次启动时加载缓存文件,我将缓存文件存储在NSHomeDirectory(). 代码(C函数)如下:

只要应用程序正在运行或从后台模式恢复运行,它就可以正常工作。但是一旦应用程序终止并重新运行,缓存的存档文件就会被删除。

有什么方法可以保留存档文件,以便我可以加载上次启动应用程序时存储的缓存。

我已经意识到,每次启动应用程序时,应用程序的 id 部分NSHomeDirectory()都是不同的。这和我的问题有关系吗?