使用 UITableViewController 时如何尽量减少重复自己

Posted

技术标签:

【中文标题】使用 UITableViewController 时如何尽量减少重复自己【英文标题】:How do you minimize repeating yourself when working with UITableViewControllers 【发布时间】:2011-02-02 15:50:51 【问题描述】:

当我使用 UITableViewControllers 时——尤其是在使用 NSFetchedResultsController 时——我发现自己在每个控制器上重复了很多基本功能。我讨厌。我更愿意将这些方法编写一次并保持整洁。

所以我想知道:你们怎么做才能不重复自己编写 UIViewControllers。你如何DRY 升级你的代码。继承、协议等等。

谢谢!期待您的回答。

(由于这个问题没有明确的答案,我会接受我认为最好的那个。 是这样的吗?)

【问题讨论】:

【参考方案1】:

您可以编写具有基本功能的自己的控制器,然后子类化并重用它们。查看为斯坦福 iPhone 应用程序开发课程构建的 CoreDataTableViewController 类 -> http://www.stanford.edu/class/cs193p/cgi-bin/drupal/node/167

【讨论】:

我喜欢这个。第一次尝试时,我无法让它发挥作用,但我重新开始,我有一些进展。【参考方案2】:

一种技术是子类化​​你自己的子类。这很好地模块化和隔离了差异,但是它会生成大量的类和文件,其中一些更难阅读。

当您想创建一堆几乎相同但只有细微差别的控制器时,您可以使用另一种技术,即为一个类提供“类型”参数或实例变量。在初始化控制器时设置控制器的类型,并在“if”或 switch 语句(等)中使用控制器的类型在运行时控制器行为的细微差异之间进行选择。这有助于将所有差异更紧凑地定位在源代码中。

【讨论】:

【参考方案3】:

我在 Swift 中为 ios 制作了这个新的 Core Data 包装器 - https://github.com/tadija/AERecord

它有 Swift 版本的 CoreDataTableViewController,还有 CoreDataCollectionViewController。

除此之外,您还可以使用它来设置 Core Data 堆栈,如下所示:

AERecord.setupCoreDataStack()

像这样访问当前线程的上下文:

AERecord.defaultContext

像这样保存上下文:

AERecord.saveContext()

像这样创建获取请求:

NSManagedObject.create()

NSManagedObject.firstOrCreateWithAttribute("city", value: "Belgrade")

NSManagedObject.deleteAll()

let predicate = ...
NSManagedObject.firstWithPredicate(predicate)

NSManagedObject.allWithAttribute("year", value: 1984)

还有更多...我希望它对某人有用。

【讨论】:

以上是关于使用 UITableViewController 时如何尽量减少重复自己的主要内容,如果未能解决你的问题,请参考以下文章

为啥我不能使用“List”作为 UITableViewController 子类的类名?

在 UITableViewController 上使用 UIViewController 类

使用带有小型表格的 UITableViewController?

重新加载 UITableViewController

在 UITableViewController 中使用分页

Swift - 使用 UITableViewController 创建子菜单