问题标签 [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 投票
1 回答
1585 浏览

objective-c - 同步的 NSKeyedArchiver 或 NSUserDefaults

我有一个单例延迟事务管理器类,它负责将由于各种因素(网络可达性、邻近性等)而无法完成的 iphone 到应用程序服务器的事务入队和出队。当可达性/邻近性恢复时,它会尝试使事务出队。另一个事务也可能在出队发生的同时被入队。
我的理解是 NSUserDefaults 是可变字典SO 链接的线程安全包装器,这正是我想要的。相同的 SO 链接认为 NSUserDefaults 是针对用户偏好的。

这些交易不是用户偏好,但这是我想要的功能。所以,这里的问题是,我可以在 NSUserDefaults 中读取/写入/同步事务的 NSMutableDictionary 而不会损坏字典,还是需要通过 NSKeyed(Un)Archiver 读取和写入来实现自己的锁定机制(见下文)?

一些代码:

出队:

0 投票
1 回答
1281 浏览

ios - 带有自定义对象的 NSKeyedUnarchiver

我有一个关于 NSKeyedUnarchiver、NSMutableArray 和自创类的问题。数据由 NSKeyedArchiver 存储到用户默认值。当数据加载到用户默认值时,将打印到数据流的控制台。我想将数据解包到一个数组中,该数组将为空。也许你们中的某个人知道我如何保存数组或数组负载。

谢谢你。

问候,舒米

0 投票
1 回答
1232 浏览

objective-c - NSKeyedArchiver .plist 附加问题

**

  1. 我正在将数据从表单获取到数组中,并尝试使用 NSKeyedArchiver 将该数组写入 .plist 文件。
  2. 写入成功,但是每当我运行脚本时它都会覆盖以前的数据。
  3. 如何将新数据附加到 .plist 文件而不是覆盖?

**

——</p>

0 投票
1 回答
1543 浏览

iphone - 如何读取使用 NSKeyedArchiever iPhone 编码的 .data 文件

我使用 NSKeyedArchiver 将 iPhone 应用程序中的数据归档到 .data 中。长话短说,我丢失了所有数据。我使用“iPhone 备份提取器”,效果很好。我为我的应用找到了一个 .data 文件。

为了清楚起见,我找到了一个 .data 文件,我会打开并查看其内容。我知道没有软件(例如:记事本)可能能够读取该文件,我可能不得不使用 Xcode。如果您知道任何方式,Xcode/notepad/someProgram,请告诉我。

这是我在构建应用程序时实现的代码:

此代码在 applicationWillTerminate、applicationDidEnterBackground 等期间调用...

在 didFinishLaunchingWithOptions 中恢复/调用数据,如下所示:

任何帮助表示赞赏!谢谢!!!

PS:iPhone 备份提取器的链接是http://supercrazyawesome.com/

0 投票
1 回答
444 浏览

ios - 使用 NSKeyedArchiver 杀死或重新启动应用程序后,NSMutableArray 消失

我有一个将Task对象(自定义类)存储在NSMutableArray. 该类Task符合NSCodingandNSCopying协议,我也实现了encodeWithCoderandinitWithCoder方法。

当用户向 中添加新任务时NSMutableArray list,我使用NSKeyedArchiver. list填充UITableView一个.

数据正在保存,当我退出应用程序并重新进入时,数据仍然存在。当我使用另一个应用程序一段时间并回来时,数据仍然存在。但是,当我在多任务任务管理或重新启动设备中“杀死”应用程序时,数据消失了。以下是一些重要的代码片段:

.

为什么当应用程序被“杀死”或设备重新启动时,我的应用程序不保存数据?此外,有趣的是,当我重新启动 iPhone 模拟器时,数据仍然存在。

0 投票
1 回答
2126 浏览

objective-c - NSKeyedUnarchiver 的 NSMutableData 的限制

我读过另一篇文章(归档/取消归档导致 initForReadingWithData 无法理解的归档),您不能在 NSMutableArray 上存储超过 250kBytes。不幸的是,为了使用 NSKeyedUnarchiver 恢复此类数据,您必须使用 NSMutableArray。我正在尝试取回大小约为 500kB 的图像。

我得到的错误是:

由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“*** - [NSKeyedUnarchiver initForReadingWithData:]:无法理解的存档(0x0、0x10、0x4a、0x46、0x49、0x46、0x0、0x1)”

显然这是一种很常见的情况(尽管我还没有找到解决方案)。你知道如何绕过 NSMutableData 的使用吗?谢谢你。

编辑:实际上它说数据的大小为 524 288 字节,这是正确的,因此问题可能来自取消存档程序。

0 投票
1 回答
376 浏览

ios - iOS:附加到档案

任何人都可以推荐一种使用 NSKeyArchiver 将数据附加到存档的内存高效方法吗?

我有一个数组,它收集对象并将它们作为内存缓存提供给应用程序。为了避免消耗越来越多的内存,我想经常将此数组存档到一个文件中,保留一个缓存文件(而不是创建单独的缓存文件)。

一种方法是将现有文件取消归档到 tempArray,而不是将现有数组中的项目添加到其中:

[tempArray addObjectsFromArray:array];

然后存档数组:

[NSKeyedArchiver archiveRootObject:tempArray toFile:file];

这种方法有其自身的目的,因为您必须在存档新数据之前将整个存档读取到内存中。

任何人都可以推荐一个更优雅的解决方案?

0 投票
2 回答
1065 浏览

iphone - 如何使用 NSKeyedArchiever 归档两个对象?

以前,我有一个使用 NSKeyedArchiver 归档的数组。

调用applicationWillTerminateapplicationDidEnterBackground

启动时,在 中didFinishLaunchingWithOPtions,数组未归档:

一切都很好。从那时起,我为 Settings 变量添加了一个 Singleton 类。我也想归档单例。我该怎么做?

让我困惑的部分是如果我调用相同的消息:

当我调用时,应用程序如何知道我要取消归档的对象:

是数组还是单例?

archiveRootObject 接受一个(id),这对我来说意味着我想要的任何东西。我可以创建一个包含数组和单例的数据类。这就是我应该这样做的吗?有没有更好的办法?欢迎任何建议。

谢谢!

0 投票
5 回答
677 浏览

iphone - 单例不会从应用程序委托持久化到另一个视图控制器

按照此链接:如何使用 NSKeyedArchiever 归档两个对象?我能够归档一个数组和一个单例对象。我可以在 didFinishLaunchingWithOptions 中归档和正确取消归档它。

但是,我的单例对象不会持续超过应用程序委托。在下一个视图控制器中,即使在 didFinishLaunchingWithOptions 中,我执行了 NSLog 并进行了验证,单例变量也会返回到其默认值。这是一个例子,

在应用中didFinishLaunchingWithOptions

NSLog(@"singleton sorting after decode: %@", [singleton sort]);// 输出:字母

然后,我分配/初始化一个 viewController 并将其设置为我的导航控制器的根视图控制器:

在 viewController -> viewWillAppear 中,

我调用一个排序函数:[self sort...];

在排序函数中,我调用了单例类: Singleton*singleton = [Singleton sharedSingleton]; 但是现在,NSLog(@"singleton sort: %@", [singleton sort]);// 输出:amount NOT alphabet

我可以发布我的单例代码,但我知道它有效。事实上,在我的设置视图控制器中,如果我更改 [singleton sort] 变量,它将在所有视图控制器中持续存在。

这让我很困惑,为什么我的单例对象不会从应用程序委托持续到我的视图控制器。任何提示/提示表示赞赏。

谢谢!!!

编辑:单例类实现

在 Singleton.m 中:

0 投票
1 回答
1520 浏览

objective-c - 使用 NSKeyedUnarchiver decodeObjectForKey 解码 NSArray 时的内存泄漏

我正在尝试修复在方法中某处导致的巨大内存泄漏,该方法从 CoreData 数据存储中获取 NSData 对象并将该 NSData 解压缩回 NSArray。

如果我释放 myArray (我不应该这样做,因为它是一个自动释放的对象),内存泄漏就会消失。

有谁知道如何解决这个问题?CustomObject 的 NSArray 中的项目是 NSDictionary 对象。

提前致谢

编辑: - (CustomObject *) getCustomObject 经常被调用,所以这个泄漏的影响是相当大的。