2013-11-09 41 views
6

我有一個默認的主細節表視圖與menu。菜單的工作原理,但由於某些原因按下「+」按鈕來添加其他細胞在我的應用程序時,我得到了以下錯誤:必須註冊一個筆尖或類的標識符或連接原型單元

終止應用程序由於未捕獲的異常「NSInternalInconsistencyException」,理由是:「無法出列具有標識符細胞的細胞 - 必須註冊標識符的筆尖或一類或

我搜索天

溶液中的故事板」連接的原型細胞如果我添加到viewDidLoad

[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:cellIdentifier]; 

我沒有收到錯誤,但添加的單元格不是在故事板中配置的單元格,也沒有指向詳細視圖控制器。

如果原型單元格的標識符字段已填充且與* cellIdentifier相同,我已經多次檢查過。

從我所知道的問題來看,其性質與here提問相同。

任何幫助,將不勝感激,如果你有時間,請解釋爲什麼它是錯的,我做了什麼或爲什麼應該添加某些代碼。

請求的代碼(兩者都是通過Xcode的5.0.1添加默認的代碼):

// Code to add the button 

UIBarButtonItem *addButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(insertNewObject:)]; 
self.navigationItem.rightBarButtonItem = addButton; 

// Code called when button is pressed: 

- (void)insertNewObject:(id)sender 
{ 
    if (!_objects) { 
     _objects = [[NSMutableArray alloc] init]; 
    } 
     [_objects insertObject:[NSDate date] atIndex:0]; 
     NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0]; 
     [self.tableView insertRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic]; 
    } 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath]; 

    NSDate *object = _objects[indexPath.row]; 
    cell.textLabel.text = [object description]; 
    return cell; 
} 

還檢查了在註釋中添加的圖片和項目文件

+1

表視圖是從故事板或筆尖實例化的嗎?如果不是,那麼它不會知道原型單元。通常情況下,你的視圖控制器將通過一個storyboard segue或一個'[storyboard instantiateViewControllerWithIdentifier]'實例化,這將反過來從故事板實例化你的表視圖和原型單元格。 –

+0

我通過故事板完成了一切(菜單代碼除外)。正如我所說,我是iOS開發的新手,所以我所知道的只是蘋果在他們的教程中的內容,並且他們使用了故事板。如果我誤解了你的問題,請原諒我。 – Nahbyr

+0

你可能會展示一些更多的代碼,特別是當你點擊+按鈕時被調用的代碼。另外,正如你所說你是新手,你是否可以詳細解釋你正在努力實現的目標以及你期待的應用程序? –

回答

2

替換以下行中[MAAppDelegate application:didFinishLaunching]

UINavigationController *masterViewController = [[UINavigationController alloc] initWithRootViewController:[MAMasterViewController new]]; 

UINavigationController *masterViewController = (UINavigationController *)self.window.rootViewController; 

當應用程序到達didFinishLaunching時,根視圖控制器已經從故事板配置(如果您看故事板,根視圖控制器是指向它的箭頭的視圖控制器)。請注意,此過程依賴於initWithCoder:初始值設定項。

didFinishLaunching你放棄這個視圖控制器,具有TWTSideMenuViewController一個實例,您已與UINavigationControllerMAMasterViewController新的,非故事板實例配置替換它。如果你仔細想想,[MAMasterViewController new]無法知道它應該從特定的故事板元素進行配置。實際上有一個用於從故事板實例化視圖控制器的API:[storyboard instantiateViewControllerWithIdentifier:]。但你不需要那樣做,因爲它已經爲你完成了。

所以解決辦法很簡單。只需配置TWTSideMenuViewController與現有的根視圖控制器self.window.rootViewController

+0

謝謝!那樣做了!並以我能理解的方式解釋!謝謝 – Nahbyr

相關問題