问题标签 [nscoding]

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 回答
7032 浏览

objective-c - NSCode:原始类型的编码器和解码器

我试图为我的模型类创建一个通用的编码器和解码器。我试图找到一种方法来为所有类型的属性调用“编码方法”,无论是对象(NSString、NSNumber、NSArray 等)还是原始类型。我看到有人在做以下事情。我想知道这是否是正确的方法。

特性:

编码器和解码器代码:

我不确定这是否是正确的方式,或者其他程序或对象是否可以写入原始属性的相同内存空间。如果上面的方法是正确的,那么上面和这个有什么区别:

我认为正确的方式:

我进行了测试,两种方法都返回了正确的值。

0 投票
4 回答
13037 浏览

ios - NSCoding VS 核心数据

我一直在寻找一篇解释 NSCoding (NSKeyedArchiver...) 相对于使用 CoreData (SQLite...) 的优缺点的文章。

有很多选择,我可以实现自己的自定义二进制读取器/写入器,或者使用 plists/xml/json... 或者使用 SQLite 或 NSCoding。

我现在有点迷路了。任何机构都可以解释主要功能之间的区别吗?

0 投票
1 回答
463 浏览

objective-c - iOS 4 与 iOS 5 中的 MKPlacemark 和 NSCoder

在 iOS 4 中,MKPlacemark不符合NSCoding.

在 iOS 5 中MKPlacemarkNSCoding通过CLPlacemark.

我不确定我是否可以使用-initWithCoordinate:addressDictionary:我自己的键/值(在地址簿之外)并摆脱它,但我真正好奇的是NSCoding.

特别是,假设我已经将MKPlacemark. 如果我想支持NSCoding,我想调用超类,只要它符合。

有趣的是,iOS 5-conformsToProtocol:iOS 4 的回归!YES

在 iOS 4 上,即使我检查超类是否响应-encodeWithCoder:(我更喜欢检查协议,但无论如何),也没关系。“哦,我有没有说过我们符合并响应那个选择器?哦!是的。不。” (卡布拉莫。)

我不想在这里检查操作系统版本,但是,如果我要YES在这两种情况下都回来......(颤抖)。

0 投票
2 回答
989 浏览

iphone - NSCoding、NSData、UIImages 和性能

我正在使用 NSCoding 来管理具有几个不同字段的自定义对象,其中一个是图像。我只针对 iOS 5.0+ 并已切换到 ARC。我一切正常,但我专注于性能——我还没有看到这样的问题,所以这里是:

我将 UIImage 转换为 NSData 并将其添加到主 NSCoding 文件(如果重要,则为 plist)以存储在磁盘上。如果有多个图像,则图像名称将变为连续的(例如 image1、image2、image3)。然后我在 UITableView(作为调整大小的缩略图)和详细视图中都使用该图像。不利的一面是 plist 的大小会膨胀,这意味着当我使用它时初始加载时间很慢,因为它一次加载所有 NSData。

消除此问题并一次仅强制加载一张图像的最佳方法是什么?

我想到的:

我将 NSData 写入磁盘,将数组添加到 plist,然后仅将每个图像的文件名的引用添加到数组中。我想我会在指定位置引用图像文件名,在磁盘上找到它并使用它?

任何和所有的想法都将受到欢迎。我比其他任何事情都更停留在概念实现上,而且有趣的是,这不是一个经常讨论的话题。

谢谢,

编辑:

如下所示,这是一个拍摄图像并将其转换为 NSData 的示例:

0 投票
3 回答
341 浏览

iphone - 保存包含 NSDictionary 的 NSArray,该 NSDictionary 包含 UIImage(和其他)的 NSArray

我在这里看到了有关保存 NSArrays/NSDictionaries 的各种问题,但是当某些子元素是 UIImages 时,我对该怎么做感到有些困惑。

提供一点上下文,该应用程序本质上是一个博客类型的应用程序。当用户撰写新条目时,他们的帖子可以包含以下内容:

  • 相册中最多 3 张图片
  • 文本
  • 地点

本质上,如果用户决定暂时取消他们的博客文章,我正在尝试为应用程序实现“保存草稿”功能。当用户取消博客文章时,会在 UIActionSheet 中询问他们是否要保存草稿。当用户想再次发帖时,他们可以从他们上次保存的草稿开始。

此时,我需要保存以下对象:

鉴于我需要保存上述 1~4 数据才能使“保存草稿”功能,最好的方法是什么?我应该做一个特殊的类来保存所有这些数据吗?另外,我是否首先需要将 UIImages 转换为 NSData 才能将它们保存到磁盘?

谢谢!!

0 投票
3 回答
1186 浏览

ios - 使用 ARC 编码和解码 CGMutablePathRef

在 ARC 下,是否可以使用 对 a CGMutablePathRef(或其非可变形式)进行编码/解码NSCoding?我天真地尝试:

但我从编译器得到一个友好的错误:

我该怎么做才能对此进行编码?

0 投票
1 回答
905 浏览

ios - NSCoder + UIDocument:它们兼容吗?

这可能是一个幼稚的问题 - 但我想仔细检查以避免浪费时间,UIDocument如果它不符合我的要求。

背景:我有一个应用程序,我为其创建了一个简单的文件系统,以将用户创建的文档保存为plists. 我的编码/解码都在工作。我正在使用一些原始类型并使用适当的编码器方法进行处理。我有一个命名系统并将 plist 保存到目录中的自定义目录中,Library因为这些是用户不应该直接访问的文档。(如果他们愿意,他们可以将数据导出到文档目录。

我开始考虑“自动保存”,然后发现UIDocument- 看起来很棒。

因此,鉴于上述情况,我似乎可以使用UIDocument吗?我保存的是从 NSObject 派生的自定义类“项目”实例。它包含一堆 NSMutable 数组,其中包含自定义类、NSDictionaries 等的实例。我现在正在阅读这个 UIDocument 教程:http ://www.raywenderlich.com/6015/beginning-icloud-in-ios-5-tutorial -part-1但不想发现由于我的数据等原因它无法正常工作。

更新:(对于那些在家阅读的人...... ;-)在这方面取得了一些进展。 UIDocument 使用NSKeyedArchiver而不是NSCoder (错误 - 请参阅下面的答案),但编码方法名称相同,因此很容易调整我已经拥有的内容。已经能够保存一个看起来像是在捕获所有数据的 plist - 但在我尝试将其全部读回之前我不会知道。收到一个我尚未解决的错误:

NSFileCoordinator:一个令人惊讶的服务器错误信号。详细信息:连接无效

并不奇怪,因为我在本地保存并不清楚它为什么要尝试连接到 iCloud。希望我能把它关掉。

0 投票
1 回答
2602 浏览

objective-c - 子类化实现NSCoding的对象时是否需要调用[super encodeWithCoder]?

我知道,当您编写实现 NSCoding 的对象的子类的 initWithCoder 方法时,您必须调用 super initWithCoder(而不是super init),但是我必须调用super encodeWithCoderencodeWithCoder 的实现吗?

0 投票
2 回答
1639 浏览

iphone - 如何在 appDelegate.m 中实现 applicationWillTerminate

我正在尝试将一些数据保存在一个名为 MyPos.h 的类中,该类使用 NSCoding 方法:

  • (void)encodeWithCoder:(NSCoder *)aCoder
  • (id)initWithCoder:(NSCoder *)aDecoder

这两种方法已在 MyPos.m 文件中实现。

现在我希望应用程序在它终止时保存数据并在它完成启动时加载数据。我想在 AppDelegate.m 文件中实现 to 方法,但我不知道如何保存保存数据的 MyPos 类的实例。

这是 AppDelegate.m 文件中的两种方法之一......到目前为止:

我该如何解决这个问题?提前非常感谢。

0 投票
1 回答
291 浏览

objective-c - Cocoa - NSCoding 保存在哪里?

NSCoding 协议的默认保存位置是什么?

另外,有什么方法可以将这样的默认位置更改为 .app 文件所在的文件夹?