2011-09-26 156 views
0

這可能是一些簡單的錯誤,我似乎無法在我的代碼中找到它。didSelectRowAtIndexPath引發異常

當過我在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

什麼是顯示在源代碼中的Xcode?在什麼行app've停止了什麼錯誤? – Nekto

+0

調試器在'didSelectRowAtIndexPath'中輸入嗎? – Nekto

回答

1

好吧發現我的問題:

在我的委託是這樣算下來

MenuViewController *menuViewController = [[[MenuViewController alloc] init] autorelease]; 
UINavigationController *navController = [[[UINavigationController alloc] initWithRootViewController:menuViewController] autorelease]; 

到底我打電話說哪裏發佈對象的方法。所以我刪除了autorelease,問題解決了。感謝所有的迴應

2

看這句話

-[NSObject(NSObject) doesNotRecognizeSelector:]() 

它清楚地說,你撥打的確實在表格視圖單元格時,點擊不是在你的代碼某處的方法。嘗試在viewDidLoad和viewWill/DidAppear方法中搜索警告SendMessageViewController

+0

這使我朝着正確的方向 – Armand

0

確保您正在調用UIViewController的指定初始化程序;因爲你沒有用筆尖你應該調用:

[[SendMessageViewController alloc] initWithNibName: nil bundle: nil]; 

或者你可以簡單地調用這個方法,在您的視圖控制器的init方法。

如果這樣不能解決問題,請在NSException上設置一個符號斷點,讓代碼在問題點停下來,並希望給您更多信息。

另一方面 - 您爲什麼要創建容器的任何特定原因查看屏幕的大小?你會得到一個免費的設置。你應該能夠將你的UITableView添加爲視圖控制器視圖的子視圖,這將有助於簡化代碼。或者只需使用UITableViewController。

+0

您也可以嘗試不在UITableView上設置scrollEnabled並查看問題是否消失。 –

+0

我喜歡爲容器設置容器,以便在屏幕上製作動畫時,它使我的生活更容易進行未來的擴展,除此之外沒有其他原因 – Armand