2012-03-27 57 views
4

我正在研究一个iPhone应用程序,并试图尽可能符合MVC(我仍在学习)。我的数据模型中有一个无符号整数,表示秒数。我希望它以'00:00'(分钟:秒)格式显示在视图中。我的问题是,这种格式应该在哪里发生? 模型对象的责任是能够以这种格式提供它吗? 控制器是否在从模型中将其传递给视图之前对其进行格式化? 或者视图处理格式?MVC与Objective-C。格式化视图的数据在哪里发生?

谢谢你的帮助。

回答

4

如果这种格式只在一个地方使用,最好的解决方案是将格式化放入视图中,而且这种方法通常效果很好。但是,如果您没有自定义视图,那么将此工作放入视图控制器是很自然的。在Cocoa的MVC版本中,视图控制器在管理视图方面具有广泛的灵活性。 (这是Cocoa的MVC与SmallTalk的MVC不同的重要地方。)

但是如果你想在视图(或视图控制器)之间共享相同的格式呢?然后,将格式代码分解成NSFormatter子类(或者在您的案例中使用现有的NSDateFormatter)。你可以传递这些信息,然后放入ivars中,甚至创建一个Singleton来保存它们。

为什么不把它放在模型中呢?好吧,假设您有四个视图以这种方式显示时间,但您随后添加了两个其他视图,将时间显示为00:00.0,然后有一个累加器视图显示小时和分钟。现在你必须不断扩展模型来处理这些情况。该模型正在获取关于视图的越来越多的信息。在格式化程序中保持格式可让您共享代码(和错误修复),而不会污染具有这些细节的模型。而具有非常特殊格式需求的视图仍然可以拥有自己的自定义代码。

没有必要为每种格式创建单独的NSFormatter子类。您可以创建一个类似“小时”,“分钟”,“秒”等选项的类MYObjectFormatter。在这方面,它的工作方式就像NSDateFormatter一样,并且在保留格式代码的同时还可以简化您的使用。脱离模型。这正是如何对NSDateNSDateFormatter进行分区。

+0

使用NSFormatter子类相对于iOS中的自定义格式化程序类(例如,与NSCells不同,不使用NSFormatter的UITableViewCells在哪里)有什么优势? – Cris 2012-03-28 00:33:36

+0

(我问,因为在它的表面,NSFormatter不提供任何接口以外的子类)。 – Cris 2012-03-28 00:57:52

+0

NSFormatter的主要优势在Mac上。我没有意识到iOS中有任何Mac提供的特殊NSFormatter支持。这就是说,没有理由使用标准接口。它运行良好并与其他格式化程序自然交换,使其更好地重用。 – 2012-03-28 23:30:19

1

你很可能会遇到一系列的意见。基本上,因为它纯粹是表现性的,所以我把它放在View层;没有控制逻辑,这完全是格式化一些现有数据以供显示的问题。

+0

+1完全同意。这显然是查看功能。 – JeremyP 2012-03-27 14:18:29

相关问题