Почему существует неперехваченное исключение?

Я получаю несколько ошибок с помощью Swift, и когда я пробовал решения, перечисленные в других сообщениях переполнения стека, я получаю дополнительные ошибки. Первая ошибка, которую я получаю: NSForwarding: warning: object 0x7dc4ca30 класса 'h2.Items' не реализует методSignatureForSelector: – проблема впереди Нераспознанный селектор – [h2.Items initWithCoder:]

Затем я обновил свой код, чтобы добавить «NSObject», и когда я это сделаю, я получаю следующую ошибку:

Завершение приложения из-за неотображенного исключения «NSInvalidArgumentException», причина: '- [h2.Items initWithCoder:]: непризнанный селектор, отправленный экземпляру 0x79069250'

Я не знаю, куда идти отсюда. Я слежу за учебником по http://shrikar.com/blog/2015/01/17/uitableview-and-uitableviewcell-customization-in-swift/

и попробовал решения от Got Unrecognized selector -replacementObjectForKeyedArchiver: сбой при реализации NSCoding в Swift

Есть ли у кого-нибудь дополнительные предложения?

Мой код:

import CloudKit import UIKit import Foundation class Items: NSObject { class Entry { var filename : String init(fname : String) { self.filename = fname } } var pics = [ Entry(fname: "circle.png") ] } 

Вот код, вызывающий этот класс:

 var items = Items() override func viewDidLoad() { super.viewDidLoad() } override func numberOfSectionsInTableView(tableView: UITableView) -> Int { return 1 } override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return items.pics.count } override func tableView(tableVIew: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as TableViewCell let entry = items.pics[indexPath.row] let image = UIImage(named: entry.filename) cell.anotherSelfie.image = image return cell } 

}

и вот код для ячейки:

 class TableViewCell: UITableViewCell { @IBOutlet var anotherSelfie: UIImageView! override func awakeFromNib() { super.awakeFromNib() } override func setSelected(selected: Bool, animated: Bool) { super.setSelected(selected, animated: animated) } } 

В этом вопросе нет ничего, что могло бы привести к ошибке, которую вы описываете. Я использовал ваш код, даже без ссылки NSObject , и он отлично работает. Проблема лежит в другом месте.

Там должно быть что-то еще, что вы не поделились с нами (например, сделать государственную реставрацию, вызвав NSKeyedArchiver самостоятельно, возможно случайно NSKeyedArchiver ссылку на что-то в раскадровке и т. Д.). Но, что бы вы ни делали, он пытается вызвать init(coder aDecoder: NSCoder) (также известный как initWithCoder ).

Итак, у вас есть две альтернативы:

  • Вы должны определить, что вызывает запуск initWithCoder для этого объекта Items . Оттуда вы можете решить, действительно ли вам нужно пройти это усилие или нет.

  • Если вы пришли к выводу, что вам нужен initWithCoder (и, возможно, encodeWithCoder тоже, в зависимости от того, что вызывает это), вы можете продолжить и сделать этот класс совместимым с NSCoding

     init(coder decoder: NSCoder) { ... } func encodeWithCoder(_ encoder: NSCoder) { ... } 

    См. Объекты кодирования и декодирования в Руководстве по программированию и сериализации архивов. Это принято для Objective-C, но идея такая же в Swift.

    Кстати, если вы пришли к выводу, что вам действительно нужно сделать Items совместимыми с NSCoding , то, скорее всего, вам придется это сделать и для Entry .

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

Честно говоря, если вы не занимаетесь архивированием или государственной реставрацией, я был бы очень удивлен, если бы вам нужно было спуститься по этой дороге. Учебник, за которым вы следите, не участвует в этом, и я ничего здесь не вижу, что предполагает, что это необходимо здесь.

Если вы не можете найти непреднамеренную ссылку на Items , запускающие этот initWithCoder , я могу предложить начать проект с нуля и посмотреть, можете ли вы воспроизвести проблему. Если вы можете воспроизвести проблему в пустом проекте, поделитесь с нами точными шагами, которые вы выполнили, чтобы выявить эту проблему, поскольку я не могу воспроизвести описанную вами проблему. Нам нужен MCVE, и я не могу воспроизвести описанную вами проблему с кодом, который был предоставлен до сих пор.

  • Вид таблицы не реагирует на касания при прокрутке
  • Заголовок заголовка UITableview, не отображающий текст
  • Как установить значок удаления вместо удаления текста для редактирования режима просмотра таблицы в iOS?
  • Минус-кнопки в режиме редактирования UITableView
  • Передайте данные обратно из PopOver в Viewcontroller
  • Приложение iOS Master-Detail с использованием раскадровки
  • iOS: как обмениваться данными между различными представлениями контроллера панели вкладок
  • Удаление кнопки удаления из UITableView только при прокрутке строки
  • получить направление прокрутки, мощность ios
  • Как задержать закрытие модального окна после выбора UITableViewCell
  • Пользовательская ячейка таблицы: «класс не соответствует требованиям к ключевым значениям»
  • Давайте будем гением компьютера.