NSMutableDictionary的自定义对象

时间:2015-03-14 19:03:56

标签: ios nsdictionary

我想为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的差异和用途。

我需要能够稍后在磁盘上编辑文本文件。通过二进制表示我不能。但似乎没有简单的方法。

2 个答案:

答案 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

然后,您可以将其添加到NSArrayNSDictionary,就像添加其他任何课程一样。

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>

请注意,在使用键控归档程序时,它可以支持为某些用例设置outputFormatNSPropertyListXMLFormat_v1_0,因此一旦您的自定义类实现归档到plist数据类型,您就可以轻松地将容器归档到一个plist(JSON将需要你做更多的工作来将数据整理成真正的容器)。