使用 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 类