Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 使用UIViewController与单独的数据源对象管理模型对象?_Iphone_Objective C_Ios_Cocoa Touch - Fatal编程技术网

Iphone 使用UIViewController与单独的数据源对象管理模型对象?

Iphone 使用UIViewController与单独的数据源对象管理模型对象?,iphone,objective-c,ios,cocoa-touch,Iphone,Objective C,Ios,Cocoa Touch,我正在编写一个简单的iOS应用程序,它使用一个表视图来显示来自一组模型对象(每个对象都是“NTTrip”的实例)的信息。我决定使用UITableViewController的单个子类来管理视图和模型对象集,还是将管理模型对象的逻辑分离为一个新对象,作为表视图的数据源(即,将逻辑分为“视图控制器”和“模型控制器”)。这是一个好主意还是我会给一个不一定需要它的系统增加额外的复杂性?一般来说,我喜欢将特定的职责(如UITableView的数据源)拆分为非UIViewController控制器。我认为这

我正在编写一个简单的iOS应用程序,它使用一个表视图来显示来自一组模型对象(每个对象都是“NTTrip”的实例)的信息。我决定使用UITableViewController的单个子类来管理视图和模型对象集,还是将管理模型对象的逻辑分离为一个新对象,作为表视图的数据源(即,将逻辑分为“视图控制器”和“模型控制器”)。这是一个好主意还是我会给一个不一定需要它的系统增加额外的复杂性?

一般来说,我喜欢将特定的职责(如UITableView的数据源)拆分为非UIViewController控制器。我认为这种分离使得测试和维护我的控制器更加容易

然而,这并不总是有意义的。如果您正在考虑使用UITableViewController,那么这意味着您希望您的表视图占据整个屏幕,这里可能没有UIViewController子类负责的其他行为。我认为,如果每个控制员没有明确的独立责任,那么多个控制员将变得不必要的复杂


一种替代方法是使用一个UIViewController子类作为表视图的委托和数据源。该控制器可以调用一些
NTTripService
控制器,这些控制器可以负责加载和持久化您的
NTTrip
对象,并使它们可供许多UIViewController子类显示。

控制器通常是应用程序中最复杂的部分,需要与数据对话并进行管理景色。在iOS中,通常没有数据控制器。因此,表视图控制器还应与模型通信,以显示表视图的正确数据。通过让另一个数据控制器与数据模型对话并充当数据源,您的原始控制器还能做什么?当然,另一个极端是将每一点工作都打包到一个单独的控制器中……但是你看到了问题所在

总之,您的单表视图控制器应该同时管理您的数据和表视图,而这正是控制器要做的


不过,如果您的相同数据由其他控制器管理(编辑、使用),您可能需要按照Jonah的建议将其考虑到服务中。否则,这只是不必要的工作和复杂化。

太好了,谢谢!你的最后一个想法完全符合我的想法。我意识到我需要至少两个不同的视图控制器来访问数据,因此创建服务控制器可能是有意义的。