#iphone #uinavigationcontroller #three20 #uitabbar
#iPhone #uinavigationcontroller #three20 #uitabbar
Вопрос:
У меня есть приложение, в котором у меня есть контроллер TTTableView внутри контроллера навигации, который находится внутри панели вкладок.
Я хочу, чтобы, если пользователь выбирает элемент, он нажимал другой TTTableView с элементами из этой категории.
У меня есть код
-(void)didSelectObject:(id)object atIndexPath:(NSIndexPath *)indexPath {
if ([object isKindOfClass:[TTTableMoreButton class]]) {
[super didSelectObject:object atIndexPath:indexPath];
} else {
CategoryViewController *viewController = [[CategoryViewController alloc] initWithNibName:@"CategoryViewController" bundle:nil];
[self.navigationController pushViewController:viewController animated:YES];
[viewController release];
}
}
CategoryViewController настроен как
@interface CategoryViewController : TTTableViewController
и в файле CategoryViewController.xib для владельца файлов установлен источник данных и делегат, а для представления установлен tableview, а для класса tableview установлен TTTableView .
Когда я запускаю его, я получаю следующую ошибку при выборе строки
2011-10-17 16:18:23.819 Biz Insider[34067:f803] -[CategoryViewController tableView:numberOfRowsInSection:]: unrecognized selector sent to instance 0x6c93d30
2011-10-17 16:18:23.820 Biz Insider[34067:f803] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[CategoryViewController tableView:numberOfRowsInSection:]: unrecognized selector sent to instance 0x6c93d30'
*** First throw call stack:
(0x1893052 0x157ed0a 0x1894ced 0x17f9f00 0x17f9ce2 0xb4cf2b 0xb4f722 0x9ff7c7 0x9ff2c1 0x9b61e 0xa0228c 0xa06783 0x9bb48 0x9b1301 0x1894e72 0x89192d 0x89b827 0x821fa7 0x823ea6 0x823580 0x18679ce 0x17fe670 0x17ca4f6 0x17c9db4 0x17c9ccb 0x1f88879 0x1f8893e 0x972a9b 0x273d 0x26b5)
terminate called throwing an exceptionCurrent language: auto; currently objective-c
Если я попытаюсь нажать другое представление (у меня есть одно с веб-просмотром), тогда оно будет работать нормально, или если я зайду в interface builder и свяжу «TableView» владельца файла с объектом TTTableView, он будет работать нормально и нажимать контроллер, за исключением того, что функция «Вытащить, чтобы обновить» не будетработа, поэтому я предполагаю, что удаление неверно, если делать это таким образом.
Любая помощь будет принята с благодарностью.
РЕДАКТИРОВАТЬ: у меня такое ощущение, что это как-то связано со следующим
-(id<UITableViewDelegate>)createDelegate {
return [[[TTTableViewDragRefreshDelegate alloc] initWithController:self] autorelease];
}
Это устанавливает делегат для TTTableViewDragRefreshDelegate, который реализует numberOfRowsInSection и весь этот мусор. Есть ли другой способ сделать это?
Приветствия, Дин
Ответ №1:
В журнале говорится, что в вашем пользовательском классе CategoryViewController
метод tableView:numberOfRowsInSection:
не реализован, и поэтому он не может его вызвать.
Проверьте его и проверьте типы его параметров.
Комментарии:
1. Я видел это, но это не обязательно должно быть реализовано, не так ли? Только если я изменяю его функциональность.
2. Конечно, это должно быть реализовано. Вы должны указать, сколько строк вы хотите отобразить
3. Это работает в других моих представлениях, хотя, насколько я знаю, TTTableViewController использует источник данных и передает эти вызовы источнику данных. Все эти функции реализованы в источнике данных.
4. Проблема в том, что nor
CategoryViewController
norTTTableViewController
реализует этот метод в вашем случае. То есть.
Ответ №2:
Ну, это странный вариант, но я изменил его с
CategoryViewController *viewController = [[CategoryViewController alloc] initWithNibName:@"CategoryViewController" bundle:nil];
Для
CategoryViewController *viewController = [[CategoryViewController alloc] init];
и теперь это волшебным образом работает … не спрашивайте меня, как и почему.
Должно быть, в наконечнике было что-то, что его портило, но я не знаю, как сейчас работает весь макет без наконечника.