在使用UITableViewController时,如何最大限度地减少重复自己

时间:2011-02-02 15:50:51

标签: iphone ios uitableview dry

当我使用UITableViewControllers时 - 特别是在使用NSFetchedResultsController时 - 我发现自己在每个控制器上都重复了很多基本功能。我讨厌哪个。我宁愿一次写这些方法并保持整洁。

所以我想知道:你们做什么不重复自己编写UIViewControllers。你如何DRY你的代码。继承,协议,等等。

谢谢!期待您的回答。

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

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

一种技术是子类化​​您自己的子类。这可以很好地模块化和隔离差异,但是它会生成很多类和文件,有些人会觉得难以阅读。

当你想要创建一堆几乎相同的控制器而只是略有不同时,你可以使用的另一种技术是给一个类一个“类型”参数或实例变量。在初始化控制器时设置控制器的类型,并在“if”或switch语句(等)中使用控制器的类型来选择运行时控制器行为的轻微差异。这有助于在源代码中更加紧凑地保留所有差异。

答案 2 :(得分:0)

我在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)

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