2014-12-21 3 views
-2

У меня есть ячейка в раскадровке Xcode с идентификатором и набором классов в свойствах.Возвращает ли NSStringFromClass идентификатор?

В коде я смотрю в чьем-то GitHub хранилище, что делает что-то похожее на мое приложение, оно имеет:

let cell = tableView.dequeueReusableCellWithIdentifier(NSStringFromClass(myCellClass), forIndexPath: indexPath) as myCellClass 

Документация говорит «Возвращает имя класса в виде строки.»

Могу ли я заменить NSStringFromClass(myCellClass) на "myidentifier", который я установил в свойствах раскадровки?

ошибка я получаю, хотя это может быть неуместным является:

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'unable to dequeue a cell with identifier MyApp.myCellClass - must register a nib or a class for the identifier or connect a prototype cell in a storyboard' 
+0

Вы прочитали сообщение об ошибке? –

ответ

1
let cell = tableView.dequeueReusableCellWithIdentifier(
    NSStringFromClass(myCellClass), 
    forIndexPath: indexPath) as myCellClass 

Интересная идея. Но этот код работает только потому, что этот программист вручную ввел имя класса ячейки в качестве идентификатора ячейки в раскадровке. Эти две вещи, по сути, не имеют ничего общего друг с другом.

+0

Спасибо. Вот фактическая реализация находится здесь на линии 164 и 171-172: https://github.com/acani/Chats/blob/master/Chats/Chats/ChatViewController.swift – user83039

+1

Хорошо, но я считаю, что я ответил на вопрос. Вы не можете передать 'NSStringFromClass (myCellClass)' в этой точке, если это имя класса _is_ также не является идентификатором. Но это, вероятно, не так. – matt

+0

Любые идеи, почему моя версия, которая вместо этого использует строку, вызывает конструктор 'required init (coder aDecoder: NSCoder)', и его версия вызывает другой конструктор: 'override init (style: UITableViewCellStyle, reuseIdentifier: String?)' – user83039

Смежные вопросы