在MVC范例之后,在Cocoa-Touch中存储标签字体信息的最佳做法是什么?
在我的数据模型中,我希望将自定义视图显示的信息存储为UILabel
。很明显,标签文本属于数据模型。但是,我应该在哪里存储相应的字体(在我的情况下还有颜色)信息?它们“属于”数据模型还是属于视图?
我问的原因是:如果我只是将类UIFont
的属性添加到我的数据模型中,那么在序列化和复制我的数据时会遇到麻烦(因为UIFont
没有实现NSCoding
和NSCopying
协议),而我通常用于我的数据模型的其他类。 (问题不存在于UIColor
,因为已有NSCoding
并且可以轻松添加NSCopying
,但仍然可以询问 <属性>是否属于到数据模型。)
一般来说,我希望能够序列化我的数据模型的所有属性,这似乎是MVC中非常常见和通用的模式。当然,我也可以编写字体信息的抽象,而不是直接使用UIFont
作为我的数据模型中的属性。但我想知道在iOS上使用MVC的最佳实践是什么。
更新:感谢您的回答。在那些我认为在模型中存储字体信息有意义的情况下,我决定采用“样式模型”实现。为了克服上面提到的困难,我简单地为这两个类写了类别,参见this link。
答案 0 :(得分:2)
如果用户(或外部输入)可以选择字体,则它是模型的一部分 您可以存储字体名称
答案 1 :(得分:1)
我不希望在数据模型中存储与字体,颜色等视图相关的信息。而不是我将使用单独的类来存储所有样式信息(该类可以从plist文件中读取)。通常,应用程序中所有标签,按钮等的颜色和其他样式属性将是相同的。所以我想在单个位置更改此信息,并希望将其传播到每个标签。此样式信息与标签显示的数据无关。
摘要是我更喜欢数据和样式的分离(如果需要,可以称之为StyleModel)。显然其他人可以选择其他方式,决定也可能取决于申请细节。 (Benoît的答案显示了一个示例,其中样式信息可能是数据模型的一部分。)