自定义对象到 NSMutableDictionary

Custom object to NSMutableDictionary

我想向 NSDictionary 添加自定义对象。它应该存储三个变量:两个字符串和一个布尔值。

我在网上浏览了一下,发现 NSCoder 是一种方式,但我不喜欢这个结果。通过使用 [dictionary setObject:[NSKeyedArchiver archivedDataWithRootObject:customObject]] 我最终得到 NSData 信息而不是人类可读的文本。我的目标是让它对人眼可读。我不想将对象编码成二进制数据。

为了让它更复杂一点,我想在 NSArray 中添加我的对象。出于测试目的,我尝试将 NSString 添加到 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 的区别和用途。

我需要能够稍后在磁盘上编辑文本文件。通过二进制表示我不能。不过好像没有直接的方法。

您是否尝试过仅通过 class 来实际创建自定义对象?

@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 中,就像添加任何其他 class 一样。

MyCustomClass *myObject = [MyCustomClass new];
myObject.name = @"name";
myObject.boolValue = YES;
myObject.description @"a description";

[myMutableArray addObject:myObject];
myMutableDictionary[@"some key"] = myObject;

您可以简单地使用数组、字典、字符串、数字、日期(任何可以写入 plist 或 JSON 的东西)。

问题是这是否仅在 'archiving' 期间完成,或者您的内存表示是否也是数组和字典。您还可以创建一个自定义 class,它可以在内部使用字典来存储数据并从该字典中存档/重新加载,或者自定义 class 是具有属性的标准 class 并创建一个存档或重新加载时即时词典。

请注意,在使用键控存档器时,它可以支持将 outputFormat 设置为 NSPropertyListXMLFormat_v1_0 用于某些用例,因此一旦您的自定义 class 实现了对 plist 数据类型的存档,您可以轻松地将容器存档到 plist(JSON 需要您做更多的工作才能将数据整理到真正的容器中)。