问题标签 [nskeyedarchiver]

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 投票
3 回答
5291 浏览

objective-c - 如何使用 NSPropertyListXMLFormat_v1_0 格式的 NSKeyedArchiver 将对象序列化为文件?

希望这个标题足够清楚。无论如何,似乎:

限于NSPropertyListBinaryFormat_v1_0

我需要格式是人类可读的 [so xml]。如果您有兴趣,这是项目的一部分,我最终将在 github 上发布一篇关于“如何对 GPS 应用程序进行单元测试”的博文

:-)

0 投票
2 回答
3180 浏览

iphone - 从 NSKeyedArchiver 加载 Singleton 的状态

我有一个类,我已经把它做成了一个单例,并且能够使用 NSKeyedArchiver 来保存它的状态,但是我不能把它的状态拉回来。

在我拥有的加载功能中

使用此代码,decodeObjectForKey 返回什么?它不能真的是 Venue 的另一个实例,并且它没有加载任何保存的值。在我将其转换为单例保存和加载之前工作正常。

0 投票
3 回答
1908 浏览

cocoa - 归档和取消归档导致访问不正确

我在设置模型对象以在 iphone 的简单图形应用程序中保存用户生成的 CALayers 的视觉状态时遇到问题。

我试图通过将这些属性传递给实现 NSCoding 协议的模型对象,然后传递给应用程序委托拥有的 NSMutableArray 来保存屏幕上所有当前图层的背景颜色和框架。然后我用 NSKeyedArchiver 归档数组并将其存储在 NSUserDefaults 中。

每个 CALayer 的 backgroundColor 属性都转换为 UIColor 以由模型对象编码以进行存储。我认为我错误地取消了阵列或未正确地从未归档的阵列恢复状态。当我尝试访问存储在模型对象中的 UIColor 对象时,我得到一个 EXC_BAD_ACCESS。

我认为这可能是编码 UIColor 对象的错误,因此尝试使用 CGColorGetComponents 函数将值从 CGColorRef 中提取出来并将它们存储在数组中以进行编码和存档,但是在取消存档后我遇到了相同的访问错误的结果,所以我认为我只是做错了。

这是我的模型对象:

这是我的归档实现:

这是我恢复状态的地方:

对此的任何帮助将不胜感激。我几乎是个菜鸟。我正在以几乎相同的方式对从颜色的浮点数转换而来的 NSNumbers 的 NSArray 进行编码、归档和解构,并且访问不正确。

0 投票
1 回答
149 浏览

iphone - 对持久键控存档进行版本控制?

对于我当前的应用程序,我使用 NSKeyedArchiver 方法在启动之间将我的对象持久保存到 iPhone。我想知道在使用版本号创建此文件时标记此文件是否有意义,以便将来当应用程序更新时,我们将知道如果需要迁移,我们正在处理什么样的数据。这是否推荐用于像使用 NSKeyedArchiver 序列化的自定义对象的 NSArray 一样简单?如果是这样,如何/在哪里存储版本号?

谢谢!

0 投票
1 回答
3091 浏览

iphone - iPhone - NSKeyedUnarchiver 内存泄漏

NSKeyedUnarchiver unarchiveObjectWithFile:用来读取应用程序数据。在 Instruments 中使用 Leaks 运行时,我被告知以下会产生泄漏:

该行:

applicationConfig = [NSKeyedUnarchiver unarchiveObjectWithFile:archivePath];

正在产生 32 字节的内存泄漏。applicationConfig 是一个实例变量。我的 initWithCode 函数只是做:

知道为什么

applicationConfig = [NSKeyedUnarchiver unarchiveObjectWithFile:archivePath];

是否产生泄漏?

0 投票
1 回答
1639 浏览

iphone - Archiver 在 iPhone 上不使用加密保护 SQLite 数据

我正在开发一个 iphone 应用程序,它使用带有 SQLite 数据存储的 Core Data 和资源包中的大量图像。我想要一种“简单”的方法来混淆 SQLite 数据库的文件结构和图像文件,以防止随意的黑客/不道德的开发人员获得对它们的访问权限。部署应用程序时,数据库文件和图像文件将被混淆。在启动应用程序时,它会读入并取消混淆数据库文件,将未混淆版本写入用户“tmp”目录以供核心数据使用,并根据需要读取/取消混淆图像文件。

我想对文件应用一个简单的算法,以某种方式扰乱/操作文件数据,以便在文本编辑器中打开数据库时无法识别 sqlite 数据库数据,因此其他应用程序都无法识别( SQLite 管理器、Photoshop 等)

从我读到的信息看来,我可以使用 NSFileManager、NSKeyedArchiver 和 NSData 来完成此操作,但我不确定如何继续。多年来一直在开发软件,但我对 CocoaTouch、Mac 和 iPhone 都是新手。也不必保护/加密我的数据,所以这是新的。

任何想法、建议或解决方案链接都将受到赞赏。

0 投票
2 回答
258 浏览

iphone - 更长的密钥是否会使 NSKeyedArchiver 文件显着更长

当我encodeWithCoder:为 iPhone 应用程序填写目标 c 类时,如果我对所有变量使用长键而不是短键,是否会使存档文件变大?

例如,如果我使用这样的非常长的键:

它会使存档文件比我使用这样的东西更长:

假设我有大量的整数和布尔值。

0 投票
1 回答
346 浏览

iphone - iPhone应用程序丢失文件

我正在编写一个 iPhone 应用程序——某个社交网络的客户端。该应用程序支持多个帐户。有关帐户的信息存储在密钥存档中。

一种用于保存的方法:

一种用于阅读的方法:

该方法saveAccounts仅在添加/修改/删除某些帐户时使用。loadAccounts每次应用程序启动时都会使用该方法。没有任何其他代码可以访问此文件。

我和我的一位测试人员遇到了问题。在某个时刻,开始表现得好像accounts.bin消失了。如果loadAccounts返回nil,应用程序会提供添加帐户。输入账号后(应用程序必须调用saveAccounts),应用程序正常运行,但是当我再次启动它时,它要求我再次添加帐户。唯一的解决方案是将应用程序重新安装到 iPhone 上,重新安装后它可以运行一段时间并出现任何问题。

我们(我和我的测试人员遇到问题)使用 3.1.2 的 iPhone 3G。另一位测试人员在使用 3.1.2 的 iPhone 3GS 上没有遇到此问题。

任何想法为什么这个文件会消失?

更新

我在我的代码中发现了错误。有一个代码可以删除整个 Document 目录。因为这部分代码是与远程服务器相关的,所以很难追踪到这段代码。错误仅在非常罕见的情况下出现。

现在发现了bug,并更正了代码。wkw的回答并没有解决我的问题,但它迫使我更深入地挖掘。谢谢!

0 投票
1 回答
746 浏览

iphone - 从使用 NSKeyedArchiver 存储的 NSMutableArray 中的 NSDictionary 读取字符串时出现问题

我正在使用一系列 NSDictionaries 保存一些数据,这些数据存储在 NSMutableArray 中并使用 NSKeyedArchiver 存档。

我基本上是在尝试将几个实例的状态保存为“Brick”类,所以我实现了一个像这样的 getBlueprint 方法(精简版)

所以我有另一种方法,可以在提供蓝图时创建一个新的 Brick 实例。

当我将“新”蓝图传递给它时,它会起作用,但当我从保存的文件中读取蓝图时则不起作用......有点。例如,旋转会起作用,但改变颜色不会。所以虽然我可以使用

如果我尝试类似

而且我知道颜色是紫色,条件不会返回 true。我认为可能是 NSKeyedUnarchiver 以某种方式将字符串更改为其他内容,但以下测试返回 true。

正如我所说,如果我尝试使用新创建的 NSDictionary 作为蓝图,这不是问题,只有当蓝图被存档然后重新读入时。

所以,像往常一样,我想知道是否有人知道为什么会发生这种情况。

如果它是相关的,这里是数据的存储和接收方式。

对不起一个问题的混乱。发生了很多事情,我正在努力完全了解自己,因此很难将其分解到最低限度。

0 投票
1 回答
574 浏览

cocoa - 可以可靠地打开和编辑 NSKeyedArchiver 的存档吗?

我正在使用类似下面的代码将对象的 NSDictionary 保存到设备。有没有办法打开这个档案,深入到它包含的字典项目,并在理想情况下编辑数据?我的猜测是不,不可靠,因为保存时完成的优化使存档难以解释......至少在使用Property List Editor之类的东西打开时看起来是这样。例如,如果我的一些对象共享一个类似的 NSString,那么 NSString 似乎只归档一次......改变了我所期望的 NSDictionary 的结构。