问题标签 [nsarchiving]
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.
objective-c - 在 NSKeyedArchiver 中查找不同的实例
我目前正在使用这个博客,它使用与 NSKeyedArchiver 一起使用的自定义类。一切似乎都是正确的,但我想知道如何获得“学生”的不同实例。
http://keeptheseinmind.blogspot.com/2011/10/nskeyedarchiver-tutorial.html
在本教程中,每次终止应用程序时都会创建自定义类“students”的新实例。而且我假设在 NSKeyedArchiver 中有许多这样的“学生”实例,但我只能访问其中一个。
保存到磁盘
从磁盘加载
编辑:
我弄错了,每次实例都相互覆盖,每次应用程序都被终止。有趣的...
但是,我的目标仍然是在一个或多个 NSKeyedArchiver 中创建许多“学生”实例。任何想法将不胜感激。
ios - 保存数据以供运行时使用
我有一个我正在尝试构建的 iOS 应用程序,它显示了我拥有的 .xlsx(MS Excel 文件)中的用户数据。该文件有近 11,000 行,每行 20 列。我构建了一个解析器,将每一行转换为 的子类NSObject
,每一列都是一个实例变量。我使它NSCoding
合规,将每个实例添加到NSDictionary
中,其键是原始文件的第一行,并将其存档。我的问题是,我不想取消归档如此庞大的文件NSDictionary
,以访问最多 20 个或其中包含的对象,我可能在任何给定时间都需要。
问题是:我如何以这种方式保存这块数据,我没有 11,000 个对象存在于堆中,并且仍然能够在应用程序运行时将我需要的对象加载到应用程序中?
ios - 检查类型为“NeXT/Apple typedstream”版本 4 (NSArchiver) 的文件
对于数据恢复程序,我需要能够从 NSArchiver 编写的文件中提取值+类型,而无需访问 Apple 的 CF / NS 框架。
OS Xfile
命令报告以下文件:
有没有关于这些文件是如何编码的文档,或者有没有人想出可以解析它们的代码?
这是此类数据的示例(也:可下载):
这包含一个 NSAttributedString。我有类似的示例,其中包含 NSMutableAttributedStrings 等,但最终都解析为 NSAttributedStrings,我喜欢为此获取文本。我不关心其余的,但我需要知道它是否有效。
我目前的解决方案是使用 NSUarchiver,假设我总是应该在那里找到一个 NSAttributedString,获取它的第一个元素并读取它的文本,然后从中重新创建一个存档,看看它是否与原始数据相同。如果我收到异常或不同的存档,我认为存档已损坏或无效:
但是,上面的代码有几个问题:
- 它不是 x 平台。我也需要这个在 Windows 上工作。
- 损坏数据的一些示例会导致写入 stderr 或 syslog 的不需要的错误消息(不确定是哪个),例如:(
*** mmap(size=18446744071608111104) failed (error code=12) *** error: can't allocate region *** set a breakpoint in malloc_error_break to debug
我提交了一份关于此的错误报告,遗憾的是,该报告已关闭为“无法修复”)。 - 没有任何东西可以保证 NSUNarchiver 代码是 100% 防崩溃的。malloc 错误就是一个例子。在某些情况下,我可能会遇到总线错误,那将是致命的。如果我有用于解析的自定义代码,我可以自己处理(并修复我遇到的任何崩溃)。(更新:我刚刚发现了一些无效数据,它们确实使用 SIGSEGV 使 NSUNarchiver 崩溃。)
因此,我需要自定义代码来解码这些类型的档案。我看过一些,但无法理解它使用的代码。显然,有长度字段和类型字段,显然类型在 0x81 到 0x86 的范围内。此外,前 16 个字节是标头,包括偏移 14-15 处的系统代码 (0x03E8 = 1000)。
我还想知道源代码是否在一些旧的 NeXT 源或曾经存在的 Windows 版本中可用,但我在哪里可以找到呢?(注意:我被定向到 GNUstep 源代码(“core.20131003.tar.bz2”),我在其中找到了它的 NSUarchiver 源代码,但是该代码显然是 1998 年的,它使用自己的编码,不理解这一点“流式“编码。)
objective-c - 在objective-c中归档对象内的对象
谢谢你的阅读,
PS:我是初学者,所以不幸的是我不太擅长这个,但任何帮助将不胜感激
所以基本上我想存档一个包含 Account 对象的大数组,它们本身包含:
1. NSString 形式的用户名,
2.一个用NSNumbers填充的加密密码数组,和
- 3.一个填充了服务数据对象的数据数组。
服务数据对象具有以下内容:
- 加密的服务类型(NSArray 填充了 NSNumber)(无论用户名和密码用于什么服务)
- 加密的用户名(用 NSNumbers 填充的 NSArray)
- 加密密码(用 NSNumbers 填充的 NSArray)
现在奇怪的是,当我尝试存档和保存它时,我得到了两个错误。有一次它不再让我将服务数据对象添加到 Account 类中的数据数组中,并显示以下错误消息(或者至少它们没有出现在我拥有的 NSTableView 中,但它确实说它们存在):
第二,当我尝试从 Account 类登录用户名和密码时,它会正确检索用户名以及我密码的第一对和最后一对 NSNumber,但密码的其余 NSNumber 为数万亿或的东西,所以我想知道出了什么问题,任何帮助将不胜感激。
这是我的实例变量的代码,我如何使用 NSKeyedArchiver 和 unarchiver,以及我如何保存和加载文件。再次,请帮助我,我已经坚持了一段时间,这是我最后的手段。我不知道发生了什么!
帐户类别:
H 文件:
完整的 M 文件:
服务数据类:
H 文件:
M 文件:
加载文件(给出文件路径):
保存文件:
ios - 在 iOS 应用程序包中包含数据
因此,我有一个新要求,即在我的 iOS 应用程序包中包含一些数据(而不是通过 API 调用下载它),因为数据非常大,并且不会经常更改。
我目前的设置是:
- 用户登录后,我从后端数据库下载数据(json 格式)
- 将其加载到我的对象模型中
- NS存档它。
- 下次登录时,我取消存档并使用数据(无需再次下载整个数据集。好吧,实际上我仍然下载数据,但只会下载更改/新记录)。
我正在寻找的是在我的应用程序中捆绑数据的最佳方法(这将使我不必下载很大的“初始”数据集)。
我知道,我可以选择将我的包中的初始数据集包含在一个 json 文件中,然后将其加载到我的对象模型中并存档,但我想知道是否可以生成一个 NSArchive 文件(其中包含我的初始数据集) 并将其包含在我的应用程序包中吗?
欢迎任何建议。
谢谢。
ios - 未归档对象没有归档对象的类描述符
我正在编写单元测试,当我遇到 NSKeyedArchiver/NSKeyedUnarchiver 的奇怪行为时。以下是失败的测试。我做错了吗?
这是一个简单的项目:https ://github.com/genesislive2007/Archiving-Headache
更新
一些日志:
归档头痛 [1638:60b] 作为字符串的类:药物
归档头痛[1638:60b] 静态类地址:0x8bfd1d0
归档头痛[1638:60b] 对象类地址:0x357c
正如您在上面看到的,类描述符的地址是不同的。
nscoding - 当类中的属性发生变化时,如何升级 NSCoding 的 initWithCoder?
我的类添加了一些属性,我更改了类的 initWithCoder 以解析出新类型。如果存档文件仍在使用旧格式,这会导致崩溃。我如何明智地实现代码,而不会导致类中的属性随时间变化而导致崩溃?
ios - NSKeyedArchiver 和 iCloud
现在,在我的应用程序中,我有一个顶级对象,该对象具有一个-(void)archive
将自身存档到应用程序文档目录的方法。
我想知道是否可以通过更改文件路径将存档简单地保存到 iCloud 而不是本地。
我已经阅读了很多关于使用 iCloud 的内容,但我还没有看到这个问题得到解决。我猜这是不可能的,但我想确定。
谢谢你。
objective-c - 如何更改 Swift 类的命名空间?
当你MyGreatClass
在Swift中实现一个类时,它的完全限定名将由<MyPackageName>.MyGreatClass
. 这与Objective-C不同,其中同一个类的完全限定名称是MyGreatClass
.
不幸的是,这给我带来了一个问题。当我使用NSUnarchiver
并且归档是用Objective-C对象编写的时,我无法使用Swift -classes 解压缩它(详细说明见下文)。
这意味着我需要找到一种方法来重命名我的Swift类的命名空间。我怎么做?
任何帮助都会很棒!
背景:为什么 NSUNarchiver 看不到/加载我的 swift 类?
我已经实现了一个小程序来读取一个文件,该文件以NSArchive
.
这些是我的文件:
main.swift
:
XRObjectAllocRun.swift
:
当我现在在Instruments文件上运行我的应用程序时,我收到以下错误:Terminating app due to uncaught exception 'NSArchiverArchiveInconsistency', reason: '*** class error for 'XRObjectAllocRun': class not loaded'
.
这真的很奇怪,因为当我在带有 桥接头文件的Objective-C文件中添加完全相同的类时,我没有任何问题。
trace file reader-Bridging-Header.h
: 是空的。
XRObjectAllocRun.h
:
XRObjectAllocRun.m
:
我错过了什么?为什么找到了我的Objective-C
班级,而Swift
没有找到我的班级?Swift 没有问题,例如var x = XRObjectAllocRun()
in main.swift
,但是当我纯粹留在in 时,NSUnarchiver
仍然抱怨缺少课程。是否在错误的地方寻找 - 它是否出于某种原因只接受 Objective-C 类?XRObjectAllocRun
Swift
NSUnarchiver
如果您想知道我要做什么,请检查这个stackoverflow 问题。
更新
这是苹果写的:
Swift 类的命名空间基于它们编译所在的模块,即使是在 Objective-C 代码中使用时也是如此。与 Objective-C 不同,所有类都是全局命名空间的一部分
此外:
例如,当您创建基于文档的 Mac 应用程序时,您在应用程序的 Info.plist 文件中提供 NSDocument 子类的名称。在 Swift 中,您必须使用文档子类的全名,包括从您的应用程序或框架名称派生的模块名称。
哎呀,现在想弄清楚这个烂摊子......
ios - 调试问题 - 值被隐藏
我需要一些关于他可能导致我的问题的想法。我有一个源代码,我想对其进行一些调试,但我看不到变量。
例如 :
我明白了:
或为此:
我是这样的:
可能是这个问题:
如何查看数组的内容?任何帮助将不胜感激!