В моем приложении используется CoreDataTableViewController из Стэнфордского курса, который является подклассом UITableViewController.
Для определенных представлений моего приложения я создаю подклассы CoreDataTableViewController для управления определенным представлением.
Я только недавно подключил кодирование состояния и восстановление в большей части своего приложения, и все, кажется, работает нормально. Единственное, что я оставил поздно, — это реализация протокола UIDataSourceModelAssociation для якобы сохранения видимых и выбранных строк UITableViews (я также надеялся, что он может сохранить состояние редактирования табличного представления и конкретной строки, если я выбрал ее для удалить, но еще не подтвердил).
Я реализовал UIDataSourceModelAssociation в CoreDataTableViewController, надеясь, что он будет работать для всех моих представлений, но при отладке функция не работает, и добавление точек останова я вижу, что ни один из двух методов UIDataSourceModelAssociation никогда не вызывается, когда я помещаю свое приложение в фон с помощью кнопки «Домой» или восстановить его, повторно запустив в XCode.
CoreDataTableViewController и его подклассы реализуют некоторые методы dataSource для фактического отображения строк в представлении таблицы. Я искал и обнаружил, что UITableViewController автоматически добавляет себя в качестве источника данных для tableView.
Я добавил в свои подклассы функции viewDidLoad проверки здравомыслия вида
assert(self.tableView);
assert(self.tableView.dataSource == self); <--- fails here
Который терпит неудачу при проверке источника данных, являющегося собой. Я вижу, регистрируя и используя отладчик, что на данный момент источник данных не равен нулю.
Я думаю, мне просто интересно, когда мы подклассифицируем класс, каждый класс имеет одно и то же значение self, или это потому, что мой UITableViewController установил себя как источник данных, но к тому времени, когда я дважды подклассировал его до моего конкретного экземпляра представления он немного отличается от родительского UITableViewController. Или что-то еще перехватывает источник данных и пересылает по мере необходимости. В качестве исправления я должен рассмотреть возможность жесткого кодирования собственного подкласса для себя или позволить CoreDataTableViewController явно добавить себя в качестве источника данных, поскольку именно здесь реализованы методы UIDataSourceModelAssociation.
Для справки, моя иерархия представлений состоит из представлений подкласса UITableViewController, находящихся внутри NavigationControllers, которые, как я слышал, могут вызывать проблемы.
Просто немного ясности в том, как подклассы должны работать в отношении указателей на себя в классах, и интересно, может ли кто-нибудь понять, почему мои методы протокола не вызываются, было бы очень ценно.
Ваше здоровье