当我使用UITableViewControllers时 - 特别是在使用NSFetchedResultsController时 - 我发现自己在每个控制器上都重复了很多基本功能。我讨厌哪个。我宁愿一次写这些方法并保持整洁。
所以我想知道:你们做什么不重复自己编写UIViewControllers。你如何DRY你的代码。继承,协议,等等。
谢谢!期待您的回答。
(由于这个问题没有明确的答案,我会接受我认为最好的答案 那是这样做的吗?)
答案 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)
还有更多...我希望它对某人有用。