2014-09-15 3 views
6

В моем приложении используется CoreDataTableViewController курса Stanford, который является подклассом UITableViewController.Подкласс UITableViewController реализует протокол UIDataSourceModelAssociation, но его методы никогда не называются

Для особых видов моего приложения я создаю подклассы CoreDataTableViewController для управления определенным представлением.

Я недавно подключил состояние кодирования и восстановления на протяжении большей части моего приложения, и все это работает нормально. Единственное, что я опаздывал, - это реализовать протокол UIDataSourceModelAssociation, чтобы якобы сохранить видимые и выбранные строки UITableViews (я также надеялся, что он сохранит состояние редактирования представления таблицы и конкретной строки, если я выбрал ее для удалить, но еще не подтвердили).

Я реализовал UIDataSourceModelAssociation в CoreDataTableViewController в надежде, что это будет только тогда работать для всех моих взглядов, но по отладке это функция не работает, и добавления точек останова я вижу, что ни один из этих двух методов UIDataSourceModelAssociation когда-либо вызывается, когда я положите мое приложение на задний план с помощью кнопки «домой» или восстановите его, перезапустив его в XCode.

CoreDataTableViewController и мои подклассы из него реализуют некоторые методы dataSource для фактического отображения строк в моем представлении таблицы. Я обыскал и обнаружил, что UITableViewController автоматически добавляет себя как dataSource для tableView.

Я добавил здравомыслие утверждает в моих подклассы viewDidLoad функции вида

assert(self.tableView); 
assert(self.tableView.dataSource == self); <--- fails here 

которая не на проверке DataSource быть самими собой. Я могу видеть, регистрируя и используя отладчик, что dataSource не равен нулю в данный момент.

Я думаю, я просто задавался вопросом, является ли когда-либо подкласс класса, каждый класс имеет одно и то же значение self, или это потому, что мой UITableViewController установил себя как источник данных, но к тому времени, когда я подклассифицировал его дважды до мой конкретный экземпляр представления сам по себе немного отличается от родительского UITableViewController. Или что-то еще перехватывает dataSource и пересылает по мере необходимости. В качестве исправления я должен рассматривать hardcoding свой собственный подкласс для себя или иметь CoreDataTableViewController, чтобы добавить себя как источник данных явно, так как здесь реализованы методы UIDataSourceModelAssociation.

Для справки моя иерархия представлений состоит из моих подклассифицированных представлений UITableViewController, живущих внутри навигационных контроллеров, которые, как я слышал, могут вызывать проблемы.

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

Приветствия

ответ

1

Я до сих пор не знаю, почему DATASOURCE моего tableViewController является не непосредственно установить самостоятельно. Но, очевидно, мои методы dataSource называются моими функциями tableView. Очевидно, что какой-то объект пересылает методы dataSource в мой фактический класс для меня ...

В конечном итоге получение методов протокола UIDataSourceModelAssociation было так же просто, как обеспечение восстановления UITableViewController и UITableView внутри него ids .. только с внешним UITableViewController, имеющим идентификатор восстановления, ни один из этих методов не вызывается.

К сожалению, теперь я обмануто этими методами, вызываемыми до того, как мой UIManagedDocument закончил загрузку, поэтому я не могу на самом деле ничего полезного в них. Это еще одна проблема.

+0

Спасибо за ваши данные, я столкнулся с этим «поведением». Убедившись, что подкласс UITableViewController имеет свойство 'dataSource', явно установленное на self (или что-то еще), вызывает вызовы методов UIDataSourceModelAssociation. –