Я создаю пользовательское представление ячейки таблицы для своего представления таблицы. После того, как я быстро подключу изображение пользовательской ячейки (в раскадровке) к моему коду, я получаю следующую ошибку.
[UITableViewCellContentView image]: unrecognized selector sent to instance 0x7fb4fad7fd20'
*** First throw call stack:
(
0 CoreFoundation 0x000000010ccbb3f5 __exceptionPreprocess + 165
1 libobjc.A.dylib 0x000000010e7e9bb7 objc_exception_throw + 45
2 CoreFoundation 0x000000010ccc250d -[NSObject(NSObject) doesNotRecognizeSelector:] + 205
3 CoreFoundation 0x000000010cc1a7fc ___forwarding___ + 988
4 CoreFoundation 0x000000010cc1a398 _CF_forwarding_prep_0 + 120
5 UIKit 0x000000010d7d8881 -[UITableViewCell _marginWidth] + 151
6 UIKit 0x000000010d7ca23d -[UITableViewCell _separatorFrame] + 70
7 UIKit 0x000000010d7ca6fa -[UITableViewCell _updateSeparatorContent] + 360
8 UIKit 0x000000010d7d4e85 -[UITableViewCell _setSectionLocation:animated:forceBackgroundSetup:] + 1174
9 UIKit 0x000000010d634ea8 __53-[UITableView _configureCellForDisplay:forIndexPath:]_block_invoke + 1822
10 UIKit 0x000000010d5b5eae +[UIView(Animation) performWithoutAnimation:] + 65
11 UIKit 0x000000010d63477b -[UITableView _configureCellForDisplay:forIndexPath:] + 312
12 UIKit 0x000000010d63bcec -[UITableView _createPreparedCellForGlobalRow:withIndexPath:willDisplay:] + 533
13 UIKit 0x000000010d61b7f1 -[UITableView _updateVisibleCellsNow:isRecursive:] + 2846
14 UIKit 0x000000010d63165c -[UITableView layoutSubviews] + 213
15 UIKit 0x000000010d5be199 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 521
16 QuartzCore 0x00000001114b6f98 -[CALayer layoutSublayers] + 150
17 QuartzCore 0x00000001114abbbe _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 380
18 QuartzCore 0x00000001114aba2e _ZN2CA5Layer28layout_and_display_if_neededEPNS_11TransactionE + 24
19 QuartzCore 0x0000000111419ade _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 242
20 QuartzCore 0x000000011141abea _ZN2CA11Transaction6commitEv + 390
21 QuartzCore 0x000000011141b255 _ZN2CA11Transaction17observer_callbackEP19__CFRunLoopObservermPv + 89
22 CoreFoundation 0x000000010cbf0347 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 23
23 CoreFoundation 0x000000010cbf02a0 __CFRunLoopDoObservers + 368
24 CoreFoundation 0x000000010cbe60d3 __CFRunLoopRun + 1123
25 CoreFoundation 0x000000010cbe5a06 CFRunLoopRunSpecific + 470
26 GraphicsServices 0x0000000110daa9f0 GSEventRunModal + 161
27 UIKit 0x000000010d545550 UIApplicationMain + 1282
28 TestWork 0x000000010caa432e top_level_code + 78
29 TestWork 0x000000010caa436a main + 42
30 libdyld.dylib 0x000000010efc3145 start + 1
31 ??? 0x0000000000000001 0x0 + 1
)
Подскажите, пожалуйста, как исправить эту ошибку?
Спасибо.
Я добавляю в свой проект точку останова на исключение.
Это линия, где он обрывается.
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = self.tableView.dequeueReusableCellWithIdentifier(kCellIdentifier) as ItemTableViewCell <---------------
Но я не использую «изображение» в своем коде.
ios
swift
uitableview
n179911
источник
источник
image]
куда-то звоните .. но не по тому объекту. первая строка ошибки говорит вам об этомОтветы:
Попробуйте установить символическую точку останова
-[NSObject(NSObject) doesNotRecognizeSelector:]
. Просто щелкните[+]
в нижнем левом углу навигатора точек останова, чтобы добавить точку останова. Затем нажмите «Добавить символическую точку останова». Воспроизведение сбоя сейчас должно дать вам лучшее представление о том, где в вашем коде возникает проблема.источник
Вы можете легко отслеживать такие сбои с помощью
Exception Breakpoints
.Откройте
Breakpoint Navigator
и добавьтеПосле того, как вы добавите точку останова на исключение, откроется опция для выбора файла
Exception
.Выбрать
Objective-C
.Запустите код и завершите работу приложения, точка останова остановит вас до того момента, когда произойдет сбой кода.
источник
Важнейшим первым шагом является анализ сообщения об ошибке:
Это говорит о том, что «сообщение»
image
было «отправлено» объекту класса UITableViewCellContentView. (Другими словами, была сделана попытка вызвать методimage
для объекта класса UITableViewCellContentView.)Первое, что нужно спросить: «Есть ли в этом хоть какой-то смысл?» Может случиться так, что названный класс имеет
Image
метод, но неimage
метод, и поэтому при вызове было использовано неправильное имя метода. Или может быть, что именованный метод естьsomeMethod:someParm:
, но класс реализуетsomeMethod:someParm:anotherParm:
, что означает, что параметр был опущен при вызове.Однако чаще всего именованный класс не имеет какого-либо метода, даже отдаленно напоминающего именованный метод, что означает, что каким-то образом в неудачном вызове использовался указатель на неправильный объект.
Например, можно сделать:
И получите сообщение об ошибке:
потому что полученный объект
myDictionary
был фактически NSDictionary, а не ожидаемым NSArray.К сожалению, больше всего сбивает с толку, когда такого рода ошибки возникают глубоко в коде системы пользовательского интерфейса, а не в вашем собственном коде. Это может произойти, если вы каким-то образом передали неправильный объект системному интерфейсу или, возможно, настроили неправильный класс в Interface Builder или где-то еще.
источник
Другая возможная причина заключается в том, что исходный объект был уничтожен, а затем был выделен другой объект по тому же адресу памяти. Затем ваш код отправляет сообщение, полагая, что он все еще имеет указатель на старый объект, и Objective-C выдает исключение, потому что новый объект не понимает это сообщение.
Чтобы диагностировать эту проблему, запустите Профилировщик с обнаружением «Зомби».
источник
Swift 5.0
Вы можете использовать интроспекцию, чтобы узнать, реагирует ли объект на определенный селектор или нет.
Только если это правда, что код будет работать .. иначе он обязательно вылетит
источник
В этих сценариях мне было полезно посмотреть на две вещи.
Когда у меня возникает эта ошибка, обычно это связано с тем, что я отправил сообщение экземпляру типа A, когда я ожидал типа B.
В этом конкретном сценарии вы можете не удовлетворять требованиям родительского класса (учитывая, что ваш экземпляр ItemTableViewCell, скорее всего, наследует).
Не могли бы вы показать нам код вашего класса ItemTableViewCell?
источник
Вы можете использовать следующий код для объявления переменной:
источник
У меня была такая же проблема, и это сработало для меня:
Переопределите isEqual в SKScene:
источник
Вы должны перейти,
indexPath
чтобы объявить объект ячейки tableview.источник