我正在开发一个iPhone应用程序并尝试尽可能地符合MVC(我还在学习)。我的数据模型中有一个无符号整数,表示秒数。我希望它以'00:00'(分钟:秒)的格式显示在视图中。我的问题是,这种格式应该在哪里发生? 模型对象是否有责任以这种格式提供它? 控制器是在从模型中取出之后但在将其传递给视图之前对其进行格式化的吗? 或者视图是否处理格式化?
感谢您的帮助。
答案 0 :(得分:4)
如果此格式仅在一个地方使用,最好的解决方案是将格式放入视图中,这种方法通常可以很好地工作。但是,如果您没有自定义视图,则将此工作放入视图控制器中是很自然的。在Cocoa的MVC版本中,视图控制器在管理视图方面具有广泛的灵活性。 (这是Cocoa的MVC与SmallTalk的MVC不同的重要地方,它基于它。)
但是如果你想在视图(或视图控制器)之间共享相同的格式呢?然后将格式化代码分解为NSFormatter
子类(或在您的案例中使用现有的NSDateFormatter
)。你可以传递它们,然后放入ivars,甚至可以创建一个Singleton来保存它们。
为什么不把它放在模型中呢?好吧,假设您有四个视图以这种方式显示时间,但是您再添加另外两个视图,将时间显示为00:00.0,然后有一个累加器视图显示小时和分钟。现在,您必须继续扩展模型以处理这些情况。该模型正在获取有关视图的越来越多的信息。在格式化程序中保留格式允许您共享代码(和错误修复),而不会使用这些细节污染模型。具有非常特殊格式需求的视图仍然可以拥有自己的自定义代码。
无需为每种格式创建单独的NSFormatter
子类。您可以创建一个MYObjectFormatter
类,其中包含“小时”,“分钟”,“秒”等选项。在这方面,它会像NSDateFormatter
一样工作,并且使用简单你需要,同时保持你的格式代码不在模型中。这正是NSDate
和NSDateFormatter
分区的原因。
答案 1 :(得分:1)
你可能会对这一点产生一系列意见。
基本上,因为它纯粹是表现性的,所以我将它放在View层中;没有控制逻辑,这完全是格式化一些现有数据以供显示的问题。