Я прочитал все похожие вопросы и пробовал все предложения, все еще ничего. Может, кто-то может заметить мой недостаток.UITableView reloadData не работает
Контроллер моего представления инициируется с другого контроллера вида с помощью одной из двух кнопок. Кнопка краны отправить NSNotification (с вложенными массивами), и этот вид контроллер ожидает это уведомление, а затем вызывает этот метод:
- (void)addContentToArray:(NSNotification *)aNotification {
array = [NSArray arrayWithArray:[aNotification object]];
([array count] == 6) ? (category = YES) : (category = NO);
[myTableView reloadData];
NSLog(@"%d", [array count]);
NSLog(@"%@", myTableView);
}
метод вызывается каждый раз, когда я вижу, что от изменения счетчика массива. Здесь объект уведомления - это массив, переданный из предыдущего контроллера представлений, и я назначаю эти объекты своему свойству локального массива - это мой источник UITableView. Поэтому я пытаюсь повторно использовать UITableView для отображения элементов любого массива. И он отлично работает для первого переданного массива (в зависимости от того, что первым).
Когда я нажимаю вторую кнопку, новый массив успешно передается (как упоминалось ранее, я знаю, что из журнала [array count], который отличается: 3 против 6 объектов в разных массивах). Однако то, что не происходит, это то, что UITableView не обновляется (хотя значения, переданные при выборе строки в таблице, относятся к правильным массивам, хотя отображаются неправильные значения).
Вот UITableView методы источника данных:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return [array count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Identifier"];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"Identifier"];
}
cell.textLabel.text = [[array objectAtIndex:indexPath.row] objectForKey:@"name"];
if (category) {
cell.detailTextLabel.text = [[array objectAtIndex:indexPath.row] objectForKey:@"description"];
}
return cell;
}
Итак, что я делаю неправильно?
Несколько других соображений, которые могут помочь:
- NSLog (@ "% @", myTableView); возвращает (null), что немного беспокоит. myTableView здесь - UITableView из моего файла nib, который правильно подключен к контроллеру представления, объявлен как свойство и синтезирован
- Контроллер вида, о котором идет речь, является правым элементом управления изображением PKRevealController, поэтому, когда он вызывается повторно, вызывается метод viewWillAppear, но не viewDidLoad (хотя, как я уже упоминал, addContentToArray: метод также вызывается каждый раз)
- Кроме того, для тех, кто знаком с PKRevealController - когда я пытаюсь запустить журнал focusController с моего контроллера представления, он говорит, что frontViewController - тот, который движется, чтобы открыть мой контроллер представления, - это тот, который сфокусирован. Может быть, это причина, по которой myTableView (null)?
Я был бы благодарен за понимание и помощь!
ли Вы забыли установить yourtabledelegate самостоятельно из XIb или от coading , – Swapnil
Привет @Swapnil, я этого не сделал. Контроллер моего представления указывается как источник данных, делегат и выход для UITableView – artooras
'NSLog (@"% @ ", myTableView);' return (null) означает, что что-то определенно неверно. Вы уверены, что у вас '@synthensize myTableView = myTableView' в файле .h? –