2017-02-21 20 views
0

Я создал два объекта UITableViewCell (FriendsCell, AddFriendsCell), и имею следующий код:Невозможно из очереди ячейки с ошибкой идентификатора, несмотря на правильно определили ячейку

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 

    if indexPath.row == self.selectedFriends.count { 
     let cell = tableView.dequeueReusableCell(withIdentifier: "AddFriendsCell", for: indexPath) as! AddFriendsCell 
     return cell 

    } else { 
     let cell = tableView.dequeueReusableCell(withIdentifier: "FriendsCell", for: indexPath) as! FriendsCell 
    ... 

AddFriendsCell есть кнопка, при нажатии, должна SEGUE к другому контроллеру просмотра. Однако, при нажатии возвращает эту хорошо документированную ошибку:

Terminating app due to uncaught exception 'NSInternalInconsistencyException', 
reason: 'unable to dequeue a cell with 
identifier AddFriendsCell - must register a nib or a class for the 
identifier or connect a prototype cell in a storyboard' 
*** First throw call stack: 

Я не могу понять, почему эта ошибка возникает, когда соответствующий прототип ячейка очень четко определена как «AddFriendsCell» в это раскадровке настройки и типа класса AddFriendsCell (класс UITableViewCell)

Когда я перейти первую строку с dequeueReusableCell:

tableview.register(AddFriendsCell, forCellReuseIdentifier: "AddFriendsCell") 

в результате получается во время выполнения он производит пустую ячейку вместо ранее правильно отформатированный AddTableCell.

Пожалуйста, помогите мне понять, почему эта ошибка возникает при нажатии этой кнопки в приложении AddFriendsCell и как ее исправить.

+1

Вы говорите, что вы правильно установить класс ячейки прототипа в раскадровке. В вашей раскадровке вы также установили свой идентификатор? – Larme

+0

Действительно, класс - это AddFriendsCell, а идентификатор - «AddFriendsCell» – Legatro

ответ

1

Вам необходимо зарегистрировать ячейку, прежде чем использовать ее. Например:

override func viewDidLoad() { 
    super.viewDidLoad() 

    var nib = UINib(nibName: "AddFriendsCell", bundle: nil) 
    tableView.register(nib, forCellReuseIdentifier: "AddFriendsCell") 

} 

UPDATE: использование, если у вас нет xib файла

override func viewDidLoad() { 
    super.viewDidLoad() 

    tableView.register(AddFriendsCell.self, forCellReuseIdentifier: "AddFriendsCell") 

} 
+0

Cheers. К сожалению, этот точный код привел к ошибке, с которой я столкнулся раньше: uncaught exception: «Не удалось загрузить NIB в пакете:« .... (длинный путь) .... »с именем« AddFriendsCell » – Legatro

+0

Попробуйте, это не то же самое, что вы говорите. Вы проходите класс, а не такой экземпляр, как я. – mhergon

+0

После ввода кода и тестирования он дает ту же ошибку. – Legatro