问题标签 [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 - 将数据存储在 NSUserdefaults 或 coredata 中?
我需要在我的应用程序中存储字典它的生命周期应该与存储在 NSUserDefaults 中的数据的生命周期相同。
实现的方法很少,但我在想
core data
,NSKeyedArchiever
和NSUserDefaults
。我会经常更新这些信息,而且字典也不会是一个大数据。
我的问题是哪种方法最好?因为从 NSUserDefault 存储和检索是昂贵的操作。
objective-c - 如何解压未知对象?
我基于 2 个对象类(classA
和classB
)为 iPad 创建了两个应用程序。
我classA
在一个文件中序列化NSKeyedArchiver
(然后附加到电子邮件中)。我想classA
在使用 的其他应用程序中取消归档该对象classB
,而不包括其他应用程序的所有标头。
问题:当我使用 NSKeyedUnarchiver 从 iPad 文件系统(从邮件附件)加载对象时,该函数返回错误(“类无法识别”)。
我尝试过 的:这些项目符号都不适合我.... a) 检查类类型(作为字符串)并转换 objectA。b) 在其他应用程序中包含 objectA 的 .h 定义。
问题: 有没有办法将对象取消归档到通用 ID 对象中?然后设置参数调用例如:
鉴于我知道函数的名称和要设置的参数的名称?
ios - 当原始类不可用时如何解码对象?
我有一个 iOS 7 应用程序,它将自定义对象作为文件保存到应用程序的 iCloud Docs 文件夹中。为此,我使用了 NSCoding 协议。
对象序列化在 iOS 7 版本的应用程序中完美运行:
initWithCoder
和encodeWithCoder
[NSKeyedArchiver archivedDataWithRootObject:person]
person = NSKeyedUnarchiver unarchiveObjectWithData:(NSData *)theData]
但是我需要将此应用程序移至 iOS 8,并且该类将被快速编码并为这个新的 iOS 8 版本的应用程序“重命名”。
当我尝试取消归档对象时,出现以下错误:
我已经尝试将 swift 类“PersonOldVersion”重命名为原始类名(“Person”),但仍然失败。
如何解码原始类不可用的对象?
ios - 如何知道文件是否已编码?
我在 iCloud 的 Docs 文件夹中有两种类型的文件:
- 文本文件
- 使用 NSCoding 协议编码的文件
两种类型都使用 .txt 扩展名。如何知道文件是否已编码?
由于我不知道文件是文本文件还是编码文件,所以首先我尝试打开任何文件,就好像它已编码一样,希望在打开的完成处理程序上会捕获任何错误:
当 UIDocument 尝试加载文件的内容时,尝试取消归档文本文件时出现异常:
异常被 触发NSKeyedUnarchiver.unarchiveObjectWithData(contents as NSData)
,表明存在无效参数:
这个例外是有道理的,因为我正在尝试解码一个文本文件(一个未编码的文件)。问题是我无法迅速捕捉到异常,当我知道该文件不是编码文件时,为时已晚。
如何知道文件是否已编码?检测文件是否已编码并因此进行编码的最佳方法是什么?
谢谢!
****** 解决方案 ******
根据@AlainCollins 的评论,我读取了编码文件的前 4 个字节,因为这将是我的幻数:
然后,我将 Docs 文件夹中每个文件的前 4 个字节与这个幻数进行了比较。
swift - 从文件名加载 SpriteKit 关卡
对于我正在创建的游戏,我希望能够创建许多可以轻松加载的自定义关卡。每个级别都应该有一个 .sks 接口文件和它自己的 SKScene 子类 .swift 文件。
现在,这是有效的:
我在哪里创建这样的场景:
但这不适用于大型集合,因为我无法遍历它们的文件夹中的每个级别。我需要这样的东西
我尝试使用这个答案从这样的字符串中获取类,但加载的场景好像它只是一个 SKScene,而不是 Level1 对象。
现在,我将使用它,但我认为这不是最好的方法:
我只是希望能够制作大量易于加载的 SKScene 子类,每个子类都有自己的接口文件。
ios - 捕获 NSKeyedUnarchiver 异常
在 Swift 中,NSKeyedUnarchiver.unarchiveObjectWithData(data)
如果无法取消归档数据,将引发异常。
在某些情况下,我们无法保证数据是否未损坏,例如从文件读取时。
我不知道 Swift 中的 try/catch 机制,也不知道这样的方法canUnarchive
可以帮助防止异常。
除了在 Obj-C 中实现 try/catch 之外,有没有纯 Swift 的解决方案来解决这个问题?
ios - 如何更好地保存 CLLocation?
我正在尝试保存我的 CLLocation 位置以供将来在我的应用程序中使用。我想出了以下几点:
当我运行我的应用程序时,编译器返回
我究竟做错了什么?还是有更好和标准的方法来保存 CLLocation 数据?
ios - Swift - NSMutableArray 中的 NSKeyedUnarchiver unarchiveObjectWithData
如何将对象变成 NSMutableArray ?我归档了 NSMutableArray。
core-data - 核心数据消息无法找到为名称注册的 NSValueTransformer 实例:NSKeyedUnarchiveFromDataTransformerName
我正在使用 Core Data 来存储 NSAttributedString 并使用可转换字段来存储数据。但是,我从 Core Data 收到以下消息,尽管一切似乎都正常。我怎样才能摆脱该消息,或者我可以安全地忽略它。
ios - 如何在 NSHomeDirectory() 下持久化文件?
我正在使用NSKeyedArchiver
并NSKeyedUnarchiver
为我的应用程序实现缓存功能。
为了在应用程序每次启动时加载缓存文件,我将缓存文件存储在NSHomeDirectory()
. 代码(C函数)如下:
只要应用程序正在运行或从后台模式恢复运行,它就可以正常工作。但是一旦应用程序终止并重新运行,缓存的存档文件就会被删除。
有什么方法可以保留存档文件,以便我可以加载上次启动应用程序时存储的缓存。
我已经意识到,每次启动应用程序时,应用程序的 id 部分NSHomeDirectory()
都是不同的。这和我的问题有关系吗?