这是我一直在玩的东西,还没有让我的头脑。用NSDictionary创建一个模型对象
在查询数据库时,您将使用响应中的数据来创建自定义模型对象是非常常见的。我们以'Book'为例。
我收到JSON
,其中描述了多个Book
对象。我将JSON
解析为NSDictionary
的NSArray
。我现在有几个选择:
使所有属性
Book
mutable(我讨厌这个选项)。然后,您可以获得BookManager
类,并使用NSArray
的NSDictionary
s,并将字典中的数据映射到正确的属性。向
Book
对象添加一个初始者,该对象接受重要细节。
实施例:
- (instancetype)initWithTitle:(NSString *)title author:(NSString *)author publishDate:(NSDate *)publishDate;
上述BookManager
类可以那么作为之前采取NSDictionary
S,但创建Book
对象与该初始化剂。这很好,因为您可以在Book
readonly
上制作所有面向公众的物业。然而,这是非常有限的,如果(通常情况下)模型上有很多属性,这是不可行的。
- 添加一个初始化程序到
Book
它接受NSDictionary
表示它自己。我不喜欢这种方法,因为我觉得责任不是从字典中创建自己的模型。我更喜欢经理类将字典映射到模型的想法。不过,我确实喜欢这样一个事实,即它意味着所有属性都可以是readonly
。
毫无疑问,在我的脑海里,我错过了其他选择,如果你知道它们,请将它们指出来。这个问题的目的是最终确定处理这种情况的最佳方式。
的方法http://stackoverflow.com/questions/5873776/using-nsmutabledictionary-as-backing-store-for-properties –
对于一般情况,我更喜欢init接受字典的方法。这个方案非常灵活,当你有一个超类或内部字典和子对象时,它会自然地“级联”,如果你希望使用一个使用KVC来执行某些入口的公共内核,你就可以自动“级联”。 (提示,使用可变字典并在你“消耗”它们时移除键,然后剩下的东西可以被“共同核心”使用) –
调查地幔 - 可能更简单,更通用https://github.com/ Mantle/Mantle/blob/master/Mantle/MTLManagedObjectAdapter.h –