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

iphone - 在 iPhone 上存储 json 数据:按原样保存 json 字符串 VS 从 json 创建一个对象并使用 NSCoding + NSKeyedArchiver

在我的 iPhone 应用程序中,我从远程服务器获取 json 数据,使用 Json 框架对其进行解析并将其呈现在 UIview 中。还希望能够为用户提供将数据存储在设备上的选项,以便也可以离线查看。我想知道直接存储 json 数据是否比创建对象然后使用 NSCoding + NSKeyedArchiver 保存更好或更差的选择。我假设按原样存储 json 字符串的优点是它在磁盘上占用的空间比归档对象少,而另一方面,通过存储归档对象,您不必每次都解析存储的数据使用更少的内存。

有没有最佳的整体选择?有没有关于这个问题的最佳实践?json 文件大小约为 8KB。

0 投票
2 回答
1610 浏览

iphone - initWithCoder:被 nib 和 NSCoding 调用!

好的,我现在有很多问题试图让 initWithCoder: 正常工作。我有一个被加载的 nib 文件,在我的应用程序委托中,我为与该 nib 关联的视图控制器调用 unarchiveWithFile:,现在我的应用程序崩溃了。我可以看到 initWithCoder: 被调用了两次,大概一次是从调用 awakeFromNib: 时开始的,然后是从我调用 unarchiveWithFile: 时开始的,因为视图控制器符合 NSCoding。但是现在它要么在视图加载时崩溃,要么在我按下 IBOutlet 时崩溃。有什么建议么??

编辑:这是 initWithCoder 的代码:

我所做的只是为地图视图解码一组注释,但是在某个地方,这个方法被调用了两次,然后它就崩溃了。

0 投票
1 回答
672 浏览

java - NSCoding 到 java

嘻嘻,

我目前正在使用 NSCoding 将我的对象写入数据并将它们保存到 Objective-c 中的文件中。有谁知道是否有办法使用相同的编码来解码 Java 应用程序中的对象结构?

谢谢

0 投票
1 回答
921 浏览

xcode - XCode/iOS:NSCoding - 具有两个公共对象数组的对象图的持久性

我有两个以准系统形式看起来像这样的类:

您会注意到它们似乎表达了相同的行为 - 编码/解码 NSMutableArray,其内容是实现 NSCoding 的 GraphEdge 类型的对象。实践中类之间的区别在于 GraphEdges 在其edges属性中创建边,而 GraphNode 添加到它自己edges对 GraphEdges.edges 中已经存在的 GraphEdge 实例的唯一引用。

edges我的问题是,在解码 GraphNode 和 GraphEdges 对象时,不会维护对象图,因为每个类都会为每个类创建存储在属性中的原始 GraphEdge 对象的自己的版本。

我尝试对 GraphNode 中的整个 NSMutableArray *edges 执行 encodeConditionalObject,同时保持 GraphEdges 中的编码无条件,但不出所料,这根本无法对 GraphNode.edges 进行编码,因为条件放置在数组本身上,而不是它的对象上。

解决方案是在这两种情况下遍历数组,并对 GraphNode 的每个成员执行条件编码,edges但对 GraphEdges 的每个成员执行无条件编码edges

任何建议表示赞赏,非常感谢。

0 投票
2 回答
3347 浏览

iphone - 符合 nscoding 的对象不会写入文件

我想将一组 Question 对象写入文件,但不知何故 writeToFile 没有做任何事情。Question 有一个 Owner 和一个 Answer 对象数组。答案也有所有者。他们三个都符合 NSCoding 协议(据我所知)。

从下面的代码中,结果返回 NO。不知道我做错了什么,因为我正在为所有事情实施 NSCoding,对吗?

问题.h

问题.m

答案.h

答案.m

所有者.h

所有者.m

相关代码行
BOOL result = [questions writeToFile:@"Users/brunoscheele/Desktop/questions.plist" atomically:YES];

0 投票
2 回答
740 浏览

iphone - 使用 NSCoding 创建用户可编辑的 Plist

我正在尝试创建一个用户可编辑的 plist,用户可以在其中存储自定义创建的锻炼例程,包括从应用程序包中的另一个 data.plist 引用的字符串。

我假设 NSCoding 是解决此问题的最佳方法。到目前为止,我将界面设置为导航栏和表格视图。

我希望它默认为空白,用户必须按导航栏右上角的“+”。然后他可以为数组中的条目输入名称,例如胸日或二头肌日。在该数组中,将是字典或当天特定练习的另一个字符串数组,例如卧推或二头肌弯举。

这个 plist 需要是可编辑的,因此它将进入用户文档文件夹而不是应用程序包。

例子:

顶部阵列包括胸部日、背部日、腿部日。在胸日词典中,包括卧推、拉胸、俯卧撑等。

更新:

增加这个方法来搜索例程文件;

0 投票
1 回答
2258 浏览

objective-c - 序列化/存储 UIView 及其子视图

我是一个相对较新的 iOS 开发人员,我以前的大部分经验都来自 .NET。我的应用程序是一个类似系统的画布,其中有一个父 UIView,其中包含用户放置/调整大小/等作为子视图的所有对象。我希望能够将这些位置/配置保存到命名文件中。

在 .NET 中,我会简单地将 UIView 子类化,给它一个“标题”属性,然后将其序列化为文件,然后将它们反序列化以将它们加载回来,但在 Cocoa 中我很迷茫。

最初我以为我可以使用 NSCoding 来做到这一点,但这似乎不是保存多个文件的好解决方案。

所以我查看了 Core Data,但我不确定如何创建现有 Cocoa UIKit 类(如 UIView)的 Core Data 对象。

我用谷歌搜索了一段时间,找不到任何关于这种困境的信息。我应该使用什么,最好的方法是什么?

0 投票
1 回答
881 浏览

objective-c - 使用 UILocalNotifications 和 NSUserDefaults 保存 localNotifications

我想localNotifications在应用程序进入后台之前保存我所有的计划。

我得到了所有的localNotificationUIApplication我尝试保存:

现在问题出现了。

尝试插入类“UIConcreteLocalNotification”的非属性值。

当我从我那里获得本地通知时,我[UIApplication sharedApplication] scheduledLocalNotifications]获得了一个UIConcreteLocalNotification. 问题是UILocalNotification符合NSCoding但这个对象UIConcreteLocalNotification不是。

我怎样才能解决这个问题?

0 投票
4 回答
1190 浏览

objective-c - 使用 NSData 和 NSCoding 加载 iOS 自定义文件格式

我正在从一些 iOS Cocoa 程序员那里寻找一些指导,了解如何实现一种机制来将自定义文件格式加载和解析到我将在内存中使用的模型对象中。我知道一定有很多方法可以解决这个问题,但让我分享一下我目前探索的路径的基本想法,以及我陷入困境的地方。

但首先,这里是上下文:假设我有一个无法更改的现有文件格式。它基本上是一种奇特的管道分隔格式,分为不同的部分,每个部分的开头如下所示:

...并且随后的 n 行都以该部分独有的方式用竖线分隔。有些部分有一个以竖线分隔的标题行,后跟 n 行数据(也是以竖线分隔的),而其他部分可能只有 n 行以竖线分隔的行。文件开头有几个小部分,最后会有一个巨大的部分描述 k-ary 树的节点:它们的父子关系以及与每个节点关联的任何数据。总而言之,这些文件的大小为数十兆字节,将来可能会更大。

最后,最后一点背景是我对 iOS 编程相当陌生。

我首先使用NSFileHandle将文件表示为NSData. 这很容易,在探索NSData接口并尝试从那里开始时,我注意到NSCoding协议,它声称是一种将对象归档和序列化为(和从)表示的工具。

我认为这听起来像是我可能需要的东西,因为我倾向于认为文件格式只是我的模型对象可以编组到的表示形式。然而,在深入研究“档案和序列化编程指南”之后,我开始怀疑自己。API 似乎不适合我想要完成的工作。

我在这里走死胡同吗?我应该寻求子类NSInputStream化,还是应该采取一些我错过的其他方法?

0 投票
1 回答
11778 浏览

xcode - 如何使用 NSKeyedArchiver 对自定义类进行编码和解码

我有一个希望保存和加载的自定义类。该类包含一个 NSDate、一个 NSString 和一个 NSNumber。我已经在 .h 文件中实现了 NSCoding 协议。这是我到目前为止的代码。theDate 是一个 NSDate。theName 是 NSString。homeAway 是 NSNumber。

我正在使用下面的代码来加载我的自定义对象。当我在调试器中使用 print-object 时,只有 homeAway 显示为实际对象。theDate 和 theName 说 0x4e4f150 似乎没有指向有效的对象。

我使用以下代码保存数据:

我用它来调用我的类来创建一个新游戏(我试图保存的自定义类)。代码到 NSDate *aDate = [gameDate date]; 无关紧要。

}

从那个方法我调用 newGame 方法,它是

为什么我的对象无法保存?复制我的对象与它有关吗?我确实在“exc bad access”的注释行上收到错误。请帮忙...