2012-02-27 56 views
0

我正在開發一款將在iPhone和iPad上使用的應用程序。iPad:Popover示例到iOS5

今天我發現我應該在iPad上使用Popover而不是PickerView。

我想使用示例應用程序在iOS5上使用它,但我一直在收到錯誤;

***終止應用程序由於未捕獲的異常 'NSInternalInconsistencyException',原因是:
' - [UITableViewController中的loadView]加載的 「2 - 視圖 - 5」 筆尖,但沒有得到一個UITableView。'
***第一擲調用堆棧:

你確切地知道我需要做什麼來解決這個問題呢? 而且,你有沒有關於iOS5的popover示例的建議?

UYLMasterViewController.m 
#import "UYLMasterViewController.h" 
#import "UYLDetailViewController.h" 

@implementation UYLMasterViewController 

@synthesize detailViewController = _detailViewController; 

#pragma mark - 
#pragma mark === View Management === 
#pragma mark - 

- (void)viewDidUnload 
{ 
[super viewDidUnload]; 
self.detailViewController = nil; 

} 



- (BOOL)shouldAutorotateToInterfaceOrientation: (UIInterfaceOrientation)interfaceOrientation 
{ 
return YES; 
} 

#pragma mark - 
#pragma mark === Table View Delegates === 
#pragma mark - 

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 
return 1; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
return 20; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
static NSString *CellIdentifier = @"Cell"; 

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
if (cell == nil) { 
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
} 

NSUInteger row = [indexPath row]; 
cell.textLabel.text = [NSString stringWithFormat:@"Item %u", row+1]; 
return cell; 
} 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
NSUInteger item = [indexPath row] +1; 
NSNumber *detailItem = [NSNumber numberWithInteger:item]; 

if (self.detailViewController) 
{ 
    self.detailViewController.detailItem = detailItem; 
} 
} 

@end 

回答

0

如果您沒有修改示例應用程序中的任何內容,這很奇怪。 無論如何,當我忘記將表設置IBOutlet連接到控制器UITableViewController時,我通常會得到這個錯誤。

這很可能是您錯誤地刪除它,或者Xcode由於某種原因失去了連接(它發生)。

看看UYLMasterViewController.h是否是一個UITableViewController。如果是,那麼UITableView必須是nib文件中的第一個視圖,直接連接到控制器的'view'IBOutlet屬性。 否則,如果UITableView在UIView中,那麼你會得到你提到的確切的錯誤。

如果UITableView不是主視圖,可能的解決方案是將UYLMasterViewController設置爲普通的UIViewController併爲其提供所有的委託訪問器,然後將連接從UITableView拖到控制器,您將看到您擁有兩個選項委託和數據源,你需要兩個。

+0

嗨,我找不到iOS5的任何示例,因此使用ios4的示例。所以當我下載一個示例時,我必須轉換適合ios5的代碼。我創建了IBOutlet並連接到了頁面上的tableView,沒有運氣。 – user973067 2012-02-27 14:11:42

+0

Uhm,是你連接到UITableViewController的控制器嗎?如果是,那麼應該已經有一個名爲tableView的屬性,您應該將UITableView連接到該屬性,而不是創建一個新的屬性。 – Leonardo 2012-02-27 14:16:17

+0

不知道我需要哪個tableview。我編輯了我使用的示例代碼(這是其中的一個......而不是Apple的),並使用故事板。我不知道如何連接ViewController上的tableview。 – user973067 2012-02-27 14:34:24