2010-01-15 100 views
1

對不起,如果這個問題已經回答,但我找不到答案。如何使用Xib文件創建UIViewController?

我正在創建一個應用程序,其中有一個UITableViewController,並且當單元右側的附件按鈕被選中時,應創建一個包含在.xib文件中找到的接口的UIViewController的新實例。新的UIViewController將被推入堆棧並顯示出來。 我的問題是如何從現有的.xib文件創建新的UIViewController?

這是我到目前爲止嘗試過的: 在Xcode中:文件 - >新建文件 - > Cocoa Touch Class - > UIViewController子類。 複選框「UITableViewController子類」未選中。 複選框「使用XIB用戶界面」選中。

這會創建一個.m,.h和一個.xib文件。我在.xib文件的「視圖」中創建了一個用戶界面。在界面構建器中選擇「文件所有者」將顯示「Class Identity」中新創建的UIViewController。

一些代碼:

在DetailViewController.m(新的UIViewController):

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    return self; 
} 

在SubViewController.m(老的UITableViewController):

-(void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath{ 
    DetailViewController *detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil]; 
    //Exception thrown at line below 
    [self.navigationController pushViewController:detailViewController animated:YES]; 
    [detailViewController release]; 
} 

忘了提的是, .xib文件的名稱是「DetailViewController.xib」。

代碼編譯得很好,但是當我在模擬器中運行它並按下附件按鈕時,它會因未捕獲的異常而終止。

我錯過了什麼?

在此先感謝

+0

在Xcode中,爲'objc_exception_thrown'設置一個斷點,以便在拋出異常時GDB將暫停,因此您可以看到堆棧跟蹤和一些您可能需要的洞察信息。 – Joost 2010-01-15 16:04:50

+0

另外,在控制檯中,您應該獲得有關未捕獲異常的日誌。把它加到你的問題上,因爲它通常提供了一個關於錯誤發生的重要線索。 – 2010-01-15 21:06:56

+0

好吧,我是Xcode的新手,所以我會研究一下。但它應該以這種方式工作?我沒有離開? initWithNibName方法和所有似乎是正確的? – 2010-01-16 12:53:29

回答

1

錯誤發生在我試圖顯示的新視圖中。在.xib文件中插入了一個MKMapView,當我刪除它時,它完全可以正常工作。

再次感謝您幫助我調試!

+1

當然 - 您應該將您的答案標記爲已接受,這樣才能保持開放。祝你好運! – 2010-01-16 15:34:54

+1

和btw如果你想要一個MKMapView你應該使用MapKit框架 – 2010-01-19 21:28:35

2

你不應該有施放此:

DetailViewController 
*detailViewController = (DetailViewController*)[[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil]; 

你得到一個編譯器警告,如果你不這樣做?

+0

你是對的 - 但錯誤依然存在。 – 2010-01-16 12:54:19

相關問題