2009-11-13 2 views
1

У меня есть серия элементов UITableViewCell с различными UIControls для установки значений модели.Обновление пользовательского интерфейса при изменении модели

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

Я разместил модель в AppDelegate и получаю ее непосредственно из RootViewController. В каждой реализации UITableViewCell у меня есть метод, который обновляет модель при внесении изменений.

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

Любая помощь будет высоко оценена.

Спасибо ..

ответ

1

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

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

+0

Thanks Luvieere, UITableViewCell имеет функцию setModel, а функцию обновления следует вызывать в RootViewController. Я могу создать переменную RootViewController в объекте UITableViewCellController и вызвать метод updateDisplay? Правильно ли это? – Prasanna

+0

Либо это, либо у вас есть функция обновления RootViewController static, поэтому вы можете назвать ее как [Обновление RootViewController]. – luvieere

+0

@Prasanna, как вы создаете один 'UITableViewCellController' (TVCC) для каждого' UITableViewCell' (TVC)? – ma11hew28

0

Если вы используете NSFetchedResultsManager, это довольно легко реализовать делегат обратного вызова к вашему UITableViewController. В частности:

- (void)controllerWillChangeContent:(NSFetchedResultsController *)controller; 
- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type newIndexPath:(NSIndexPath *)newIndexPath; 
- (void)controller:(NSFetchedResultsController *)controller didChangeSection:(id <NSFetchedResultsSectionInfo>)sectionInfo atIndex:(NSUInteger)sectionIndex forChangeType:(NSFetchedResultsChangeType)type; 
- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller; 

Посмотрите на RootViewController в Core Data Books, например, для реализации.

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

Смежные вопросы