Xcode перезагрузки таблицы - PullRequest
0 голосов
/ 21 декабря 2011

В моем приложении табличное представление заполняется значениями из NSMutableArray.Этот изменяемый массив добавляется в отдельный viewcontroller, поэтому мне нужно перезагрузить данные.

Вероятно, это очень простой вопрос, но я читаю 15+ постов, и ни один из них, похоже, не касается xcode 4.2 и где именно поместить [self.tableView reloadData].Где именно этот метод должен быть помещен?Когда я попытался поместить его в различные места исходного кода табличных представлений, табличное представление впервые инициализировалось без значений.

Или его следует поместить в код других контроллеров представления, в этом случае как можноЯ ссылаюсь на конкретный экземпляр моего подкласса UItableview, который используется?

Заранее большое спасибо.

Ответы [ 5 ]

2 голосов
/ 21 декабря 2011

В Xcode 4.2 нет ничего особенного, что могло бы иметь здесь какое-то значение, поэтому вам следует обратить внимание на другие источники, которые вы нашли, даже если они ссылаются на другие версии Xcode.

Он не имеетбыть [self.tableView reloadData] точно.Вы отправляете объект табличного представления сообщение reloadData.Доступ к этому объекту табличного представления - через свойство self, через переменную экземпляра, через свойство другого класса и т. Д. - зависит от вас.

Если у вас уже установлено свойство tableViewвверх, то самый простой способ перезагрузить данные из другого контроллера представления - просто отправить объект табличного представления сообщение reloadData напрямую.Так, например, если метод в ViewControllerFoo имеет указатель на ViewControllerBar с именем bar и знает, что должен перезагрузить представление таблицы, он может вызвать [bar.tableView reloadData].

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

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

0 голосов
/ 22 декабря 2011

Обычно вы вызываете reloadData в методе "viewDidLoad" viewController, который установлен как источник данных и делегат tableView.Но это не имеет большого значения, просто убедитесь, что вы вызываете reloadData каждый раз после изменений в datamodel (ваш NSMutableArray).

Судя по вашему описанию, reloadData не является вероятной причиной вашей проблемы.Убедитесь, что вы установили свой viewController в качестве свойства dataSource для tableView.

Кроме того, вы обычно используете источник данных, как я и предполагал, вместо того, чтобы создавать подклассы TableView, как вы, похоже, делаете.

0 голосов
/ 22 декабря 2011

Вы должны проверить, правильно ли реализован ваш массив. Попробуйте войти в систему при входе в представление, например, в методе -viewWillAppear.

Обычно вы вводите [self.tableView reloadData] в методе -viewWillAppear.

0 голосов
/ 21 декабря 2011

Вы используете навигационный контроллер?Контроллер представления, который заполняет данные массива, помещается поверх представления таблицы?Если это так, поместите вызов reloadData в viewwillappear, потому что он вызывается, когда отключается подпредставление контроллера навигации и теперь снова отображается табличное представление.

0 голосов
/ 21 декабря 2011

после того, как вы выполните [tableView reloadData];

tableView перезагрузит и делегирует функцию для получения содержимого таблицы

если вы [tableView reloadData] очистите свою таблицу

, тоотметьте

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

, там вы должны прочитать неправильное значение

...