我有一张桌子。当我点击表格行时,我想推送一个新视图。我知道在navigationController中有如何推送它,但我想使用这样的代码:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
// Navigation logic -- create and push a new view controller
TasksViewController *tasks = [[TasksViewController alloc]
initWithNibName:@"Tasks"
bundle:nil];
LoginAppDelegate *delegate = [[UIApplication sharedApplication] delegate];
[delegate.window addSubview:[tasks view]];
[self.view removeFromSuperview];
}
TaskViewCOntroller是我想要推送的视图。当我尝试执行此操作时,我有一个例外:
*** Assertion failure in -[UITableView _createPreparedCellForGlobalRow:withIndexPath:], /SourceCache/UIKit_Sim/UIKit-1448.89/UITableView.m:5678
2011-09-16 12:26:41.118 LeoAction[1149:207] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'UITableView dataSource must return a cell from tableView:cellForRowAtIndexPath:'
*** Call stack at first throw:
(
0 CoreFoundation 0x00df55a9 __exceptionPreprocess + 185
1 libobjc.A.dylib 0x00f49313 objc_exception_throw + 44
2 CoreFoundation 0x00dadef8 +[NSException raise:format:arguments:] + 136
3 Foundation 0x000e03bb -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 116
4 UIKit 0x0035ac91 -[UITableView(UITableViewInternal) _createPreparedCellForGlobalRow:withIndexPath:] + 883
5 UIKit 0x003504cc -[UITableView(UITableView
我不知道如何处理此异常?
答案 0 :(得分:2)
例外情况是告诉您tableView:cellForRowAtIndexPath:
方法存在问题。听起来你没有为被调用方法的每个实例提供正确的返回路径。
检查在此方法结束时您是否有return cell;
。
至于导航,您应该执行以下操作:
[self.navigationController pushViewController:tasks animated:YES];
UIViewController
为您定义导航控制器,因此推送新控制器就像实例化它并调用上述方法一样简单。
的修改
关于导航控制器 - 当您设置顶级表视图控制器时,您需要它由UINavigationController拥有。为了简单起见,我假设您正在使用Interface Builder。
在MainWindow.xib
中,拖动导航控制器对象。展开其显示箭头,您将看到它包含导航栏和根视图控制器。选择此根视图控制器,然后在身份检查器中将其类更改为自定义表视图控制器,并在属性检查器中将其NIB名称字段更改为相应的nib。根据需要将导航控制器连接到App Delegate对象。
然后,您应该发现可以在pushViewController:animated:
内使用self.navigationController
tableView:didSelectRowAtIndexPath:
方法。
我希望这会有所帮助。
答案 1 :(得分:-1)
你应该像这样推动它:
[self.navigationController pushViewController:taskViewController animated:YES];
答案 2 :(得分:-1)
你可以推出像贝娄一样
TasksViewController *tasks = [[TasksViewController alloc]
initWithNibName:@"Tasks"
bundle:nil];
[self.navigationController pushViewController:tasks animated:YES];
[tasks release];