我想为NSDictionary添加一个自定义对象。它应该存储三个变量:两个字符串和一个布尔值。
我在网上阅读并发现NSCoder是这样的,但我不喜欢结果。通过使用[字典setObject:[NSKeyedArchiver archivedDataWithRootObject:customObject]]我最终得到NSData信息而不是人类可读文本。我的目标是使它对人眼可读。我不想将对象编码为二进制数据。
为了使它更复杂一点,我想在NSArray中添加我的对象。出于测试目的,我尝试将NSStrings添加到NSArray并调用[NSDictionary dictionaryWithObject:array forKey:@" myKey"]。结果很完美。它对人类来说是可读的。我想添加我的自定义对象而不是NSString。
期望的结果应该如下所示:
{
TextStrokeColor = "UIDeviceWhiteColorSpace 0.5 1";
TextStrokeWidth = 0;
MyObjects = (
MyCustomObject = {
name = "name";
boooool = 0;
description = "";
}
, ... other objects );
}
我应该使用什么?我并没有真正了解NSCoder,NSCoding,NSCopying的差异和用途。
我需要能够稍后在磁盘上编辑文本文件。通过二进制表示我不能。但似乎没有简单的方法。
答案 0 :(得分:1)
您是否尝试过创建一个自定义对象?
@interface MyCustomClass : NSObject
@property (nonatomic, strong) NSString *name;
@property (nonatomic, strong) BOOL boolValue;
@property (nonatomic, strong) NSString *description;
@end
@implementation MyCustomClass
// put any implementation methods here
@end
然后,您可以将其添加到NSArray
或NSDictionary
,就像添加其他任何课程一样。
MyCustomClass *myObject = [MyCustomClass new];
myObject.name = @"name";
myObject.boolValue = YES;
myObject.description @"a description";
[myMutableArray addObject:myObject];
myMutableDictionary[@"some key"] = myObject;
答案 1 :(得分:1)
您可以简单地使用数组,字典,字符串,数字,日期(可以写入plist或JSON的任何内容)。
问题是,这只是在“归档”期间完成,或者您的内存中表示是否也是数组和词典。您还可以创建一个自定义类,该类在内部使用字典来存储数据并从该字典中存档/重新加载,或者自定义类是具有属性的标准类,并在存档或重新加载时即时创建字典。 / p>
请注意,在使用键控归档程序时,它可以支持为某些用例设置outputFormat
到NSPropertyListXMLFormat_v1_0
,因此一旦您的自定义类实现归档到plist数据类型,您就可以轻松地将容器归档到一个plist(JSON将需要你做更多的工作来将数据整理成真正的容器)。