'instance로 보낸 인식되지 않는 선택기' 오류를 디버깅하려면 어떻게 해야 합니까?
내 표 보기에 대한 사용자 정의 표 셀 보기를 작성하는 중입니다.커스텀 셀(스토리보드 내) 이미지 뷰를 내 코드에 빠르게 연결하면 다음과 같은 오류가 발생합니다.
[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 <---------------
하지만 저는 제 코드에서 '이미지'를 사용하지 않습니다.
기호 중단점을 설정해 보십시오.-[NSObject(NSObject) doesNotRecognizeSelector:]
클릭만 하면 됩니다.[+]
중단점 네비게이터의 왼쪽 하단 모서리에서 중단점을 추가합니다.'Symbolic Breakpoint'는 'Symbolic Breakpoint'입니다.지금 충돌을 재현하면 코드에서 문제가 발생하는 위치를 더 잘 파악할 수 있습니다.
다음을 사용하여 이러한 충돌을 쉽게 추적할 수 있습니다.Exception Breakpoints
.
.Breakpoint Navigator
가합다니를 추가합니다.
Breakpoint를 , "" " " " " " " 를 할 수 .Exception
.
를 선택합니다.Objective-C
.
코드를 실행하고 응용 프로그램을 중단하면 중단점이 코드가 충돌하는 지점까지 당신을 막을 것입니다.
중요한 첫 번째 단계는 오류 메시지를 분석하는 것입니다.
[UITableViewCellContentView image]: unrecognized selector sent to instance
은 " "메시지"가 "메시지"라는 .image
UITableViewCellContentView입니다즉, 메소드를 호출하려는 가 있었습니다.image
UITableViewCellContentView를 참조하십시오.)
첫 번째 질문은 "이게 말이 됩니까?"입니다.명명된 클래스에 다음이 있을 수 있습니다.Image
방법, 그러나 방법은 아닙니다.image
메서드가 호출에 잘못된 메서드 이름이 사용되었습니다.또는 명명된 방법이 다음과 같을 수 있습니다.someMethod:someParm:
은 그나수업실니다행됩은러lements를 실행합니다.someMethod:someParm:anotherParm:
호출에서 매개 변수가 누락되었음을 의미합니다.
그러나 대부분의 경우 명명된 클래스는 명명된 메서드와 모호하게 유사한 메서드를 가지고 있지 않습니다. 즉, 실패한 호출에서 잘못된 개체에 대한 포인터가 사용되었습니다.
예를 들어, 다음과 같은 작업을 수행할 수 있습니다.
NSArray* myArray = [myDictionary objectForKey:@"values"];
NSString* myString = [myArray objectAtIndex:5];
다음과 같은 오류가 표시됩니다.
[__NSDictionaryI objectAtIndex:] unrecognized selector sent to instance
왜하면객체검때색문다기니입에서 입니다.myDictionary
사실 NSD 사전이지 예상했던 NSRray가 아니었습니다.
불행하게도, 가장 혼란스러운 것은 이러한 종류의 오류가 사용자 자신의 코드가 아닌 UI 시스템 코드 깊숙이 발생할 때입니다.이 문제는 잘못된 개체를 시스템 인터페이스에 전달하거나 인터페이스 빌더 또는 다른 곳에서 잘못된 클래스를 구성한 경우에 발생할 수 있습니다.
또 다른 가능한 이유는 원래 개체가 삭제된 다음 다른 개체가 동일한 메모리 주소에 할당되었기 때문입니다.그러면 코드는 이전 개체에 대한 포인터가 아직 있다고 생각하여 메시지를 보내고, 목표-C는 새 개체가 해당 메시지를 이해하지 못하기 때문에 예외를 던집니다.
이 문제를 진단하려면 '좀비' 탐지와 함께 프로파일러를 실행합니다.
스위프트 5.0
Introspection을 사용하여 개체가 특정 선택기에 응답하는지 여부를 확인할 수 있습니다.
let canWork = yourObject.respondsToSelector(Selector("image")) // true
코드가 작동한다는 것이 사실일 경우에만..그렇지 않으면 그것은 확실히 추락할 것입니다.
이러한 시나리오에서 저는 두 가지를 살펴보는 것이 도움이 된다는 것을 알았습니다.
- 콜 스택
- 각 스택 프레임의 로컬 변수(및 해당 유형)
이 오류가 발생한 것은 대개 유형 B를 예상할 때 유형 A의 인스턴스에 메시지를 보냈기 때문입니다.
이 특정 시나리오에서는 상위 클래스의 요구 사항을 충족하지 못할 수 있습니다(ItemTableViewCell 인스턴스가 상속될 가능성이 가장 높음).
ItemTableViewCell 클래스의 코드를 보여주시겠습니까?
다음 코드를 사용하여 변수를 선언할 수 있습니다.
let noteListTableViewCellobject = "NoteListTableViewCell";` `// Note listTablecell create custom cell`
func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! {
var cell:NoteListTableViewCell? = tableView.dequeueReusableCellWithIdentifier(noteListTableViewCellobject) as? NoteListTableViewCell
if (cell == nil) {
let nib:Array = NSBundle.mainBundle().loadNibNamed("NoteListTableViewCell", owner: self, options: nil)
cell = nib[0] as? NoteListTableViewCell
}
}
저도 같은 문제를 겪었고, 이것은 저에게 효과가 있었습니다.
SKScene에서 isEqual을 재정의합니다.
- (BOOL)isEqual:(id)other {
if (![other isMemberOfClass:[SKScene class]]) {
return false;
}
return [super isEqual:other];
}
합격해야 합니다.indexPath
테이블 뷰 셀의 개체를 선언합니다.
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath)
return cell
}
언급URL : https://stackoverflow.com/questions/25853947/how-can-i-debug-unrecognized-selector-sent-to-instance-error
'programing' 카테고리의 다른 글
@Transactional은 어디에 두나요?인터페이스 사양 또는 구현 시? (0) | 2023.08.01 |
---|---|
봄의 카프카 소비자 청취자 한 명이 여러 주제를 들을 수 있습니까? (0) | 2023.08.01 |
ts1206 데코레이터는 여기서 사용할 수 없습니다. Angular 2 (0) | 2023.08.01 |
문자열을 QString으로 변경하는 방법은 무엇입니까? (0) | 2023.08.01 |
Android 8.1로 업그레이드한 후 startForground 실패 (0) | 2023.08.01 |