这可能是一些简单的错误,我似乎无法在我的代码中找到它。
当我点击tableview中的单元格时,我得到一个异常
这是我的界面:
@interface MenuViewController : UIViewController <UITableViewDataSource, UITableViewDelegate>
@end
我不使用XIB文件,所以这是我的loadView
- (void)loadView
{
UIView *myview = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.title = @"Menu";
UITableView *tableViewMenuItems = [[UITableView alloc] initWithFrame:CGRectMake(10, 10, 300, 150) style:UITableViewStyleGrouped];
tableViewMenuItems.backgroundColor = [UIColor clearColor];
tableViewMenuItems.delegate = self;
tableViewMenuItems.dataSource = self;
tableViewMenuItems.scrollEnabled = NO;
[myview addSubview:tableViewMenuItems];
[tableViewMenuItems release];
self.view = myview;
[myview release];
}
这是选择行的委托方法
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
SendMessageViewController *sendMessageViewController = [[SendMessageViewController alloc] init];
[self.navigationController pushViewController:sendMessageViewController animated:YES];
[sendMessageViewController release];
}
我的bt
#0 0x94e3c9c6 in __pthread_kill ()
#1 0x98079f78 in pthread_kill ()
#2 0x9806abdd in abort ()
#3 0x9588a921 in abort_message ()
#4 0x958881bc in default_terminate ()
#5 0x010ee23b in _objc_terminate ()
#6 0x958881fe in safe_handler_caller ()
#7 0x95888268 in std::terminate ()
#8 0x958892a0 in __cxa_throw ()
#9 0x010ee416 in objc_exception_throw ()
#10 0x00f9c0bb in -[NSObject(NSObject) doesNotRecognizeSelector:] ()
#11 0x00f0b966 in ___forwarding___ ()
#12 0x00f0b522 in __forwarding_prep_0___ ()
#13 0x0008c870 in -[UITableView _selectRowAtIndexPath:animated:scrollPosition:notifyDelegate:] ()
#14 0x00082b05 in -[UITableView _userSelectRowAtPendingSelectionIndexPath:] ()
#15 0x0079c79e in __NSFireDelayedPerform ()
#16 0x00f7b8c3 in __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ ()
#17 0x00f7ce74 in __CFRunLoopDoTimer ()
#18 0x00ed92c9 in __CFRunLoopRun ()
#19 0x00ed8840 in CFRunLoopRunSpecific ()
#20 0x00ed8761 in CFRunLoopRunInMode ()
#21 0x011d21c4 in GSEventRunModal ()
#22 0x011d2289 in GSEventRun ()
#23 0x00023c93 in UIApplicationMain ()
#24 0x00002589 in main (argc=1, argv=0xbffff698) at main.m:14
我做错了什么?
答案 0 :(得分:2)
看看这一行
-[NSObject(NSObject) doesNotRecognizeSelector:] ()
它清楚地表明,当您单击表格视图单元格时,您正在调用代码中某处不存在的方法。尝试在SendMessageViewController
答案 1 :(得分:1)
好的发现了我的问题:
我的代表正在这样做
MenuViewController *menuViewController = [[[MenuViewController alloc] init] autorelease];
UINavigationController *navController = [[[UINavigationController alloc] initWithRootViewController:menuViewController] autorelease];
所以最后我在释放的对象上调用方法。所以我删除了自动释放,问题解决了。感谢所有回复的人
答案 2 :(得分:0)
确保您正在调用UIViewController的指定初始化程序;因为你没有使用笔尖,所以你应该打电话:
[[SendMessageViewController alloc] initWithNibName: nil bundle: nil];
或者,您只需在视图控制器的init方法中调用此方法即可。
如果这不能解决问题,请在NSException上设置符号断点,以使代码在问题点停止,并希望为您提供更多信息。
顺便说一下 - 为什么要创建一个容器视图屏幕大小的任何特定原因?你将免费获得一个设置。您应该只能将UITableView添加为视图控制器视图的子视图,这有助于简化代码。或者只使用UITableViewController。