Как вы минимизируете повторение при работе с UITableViewControllers? - PullRequest
1 голос
/ 02 февраля 2011

Когда я работаю с UITableViewControllers - особенно при использовании NSFetchedResultsController - я обнаруживаю, что повторяю множество базовых функций на каждом контроллере. Который я ненавижу. Я бы очень хотел написать эти методы один раз и держать все в чистоте и порядке.

Поэтому мне было интересно: что вы, ребята, делаете, чтобы не повторять себя, пишя UIViewControllers. Как вы СУХОЙ ваш код. Наследование, протоколы, что угодно.

Спасибо! Ждем ваших ответов.

(Поскольку на этот вопрос нет однозначного ответа, я приму тот, который считаю лучшим.
Это способ сделать это?)

Ответы [ 3 ]

2 голосов
/ 02 февраля 2011

Вы можете написать свои собственные контроллеры с основными функциями, а затем создать подкласс и повторно использовать их. Проверьте класс CoreDataTableViewController, созданный для курса по разработке приложений для iPhone в Стэнфорде -> http://www.stanford.edu/class/cs193p/cgi-bin/drupal/node/167

1 голос
/ 02 февраля 2011

Один из методов заключается в создании подкласса для вашего собственного подкласса. Это обеспечивает модульную разметку и аккуратно изолирует различия, однако генерирует множество классов и файлов, которые некоторым труднее читать.

Другой метод, который вы можете использовать, когда хотите создать группу практически идентичных контроллеров с небольшими отличиями, - дать одному классу параметр типа или переменную экземпляра. Установите тип контроллера при запуске контроллера и используйте тип контроллера в «if» или в операторах switch (и т. Д.), Чтобы выбрать между небольшими различиями в поведении контроллера во время выполнения. Это может помочь сохранить все различия более компактно расположенными в исходном коде.

0 голосов
/ 07 ноября 2014

Я сделал эту новую оболочку Core Data для iOS в Swift - https://github.com/tadija/AERecord

Она имеет Swift-версию CoreDataTableViewController и CoreDataCollectionViewController.

Кроме того, вы можете использовать ее для настройки CoreСтек данных выглядит так:

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)

И многое другое ... Надеюсь, это кому-нибудь пригодится.

...