Development Tip

[UILabel copyWithZone :] : 인식 할 수없는 선택기가 인스턴스로 전송되었습니다.

yourdevel 2020. 12. 13. 11:13
반응형

[UILabel copyWithZone :] : 인식 할 수없는 선택기가 인스턴스로 전송되었습니다.


나는 여기 벽에 머리를 부딪 히고있는 것처럼 느껴진다 (솔직히 그렇게 할 준비가되어있다).

뷰에 배경을 설정하려고합니다. 내가 설정해야하는 배경은 이미지이며이 코드를 사용하고 있습니다 (다른 두 UIViewController 하위 클래스에서 완벽하게 작동합니다-새 파일에 복사 / 붙여 넣기).

UIImage *img = [gameNode imageFromKey:@"background"];
UIColor *bg = [[UIColor alloc] initWithPatternImage:img];
self.view.backgroundColor = bg;
[bg release];

내가 말했듯이 이것은 다른 두 곳에서 완벽하게 작동하지만 여기서는 라인 self.view.backgroundColor = bg스로우

'NSInvalidArgumentException', reason: '-[UILabel copyWithZone:]: unrecognized selector sent to instance 0x9259840'

더 이상 갈 것이 없습니다. IB에서 최상위 뷰의 참조 출력이 파일의 소유자로 설정되어 있는지 확인했습니다. 프로젝트를 정리하고 다시 시작했습니다. 나는 심지어 Xcode를 닫고 다시 시작했다. 운이 없다. 내가 또 무엇을 놓치고 있습니까?

편집 : 내가 언급했듯이 백 스택 추적은 많지 않습니다.

2012-05-28 13:13:56.997 OOKL[36012:17303] -[UILabel copyWithZone:]: unrecognized selector sent to instance 0x92b79a0
2012-05-28 13:13:56.997 OOKL[36012:17303] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UILabel copyWithZone:]: unrecognized selector sent to instance 0x92b79a0'
*** First throw call stack:
(0x2933052 0x44c7d0a 0x2934ced 0x2899f00 0x2899ce2 0x2935bd9 0xaa92dd 0x6a4f40 0x6a4eeb 0x6bfd60 0xc0191a 0x2934e1a 0x289e821 0xc0046e 0xaa7e2c 0xaa83a9 0xaa85cb 0xb2b59 0xb1969 0x2934ec9 0x9e55c2 0x9e555a 0xa8ab76 0xa8b03f 0xa8a2fe 0xa0aa30 0xa0ac56 0x9f1384 0x9e4aa9 0x2ac6fa9 0x29071c5 0x286c022 0x286a90a 0x2869db4 0x2869ccb 0x2ac5879 0x2ac593e 0x9e2a9b 0x214d 0x20c5)

다른 것은 없습니다-전후.


매번 추적하거나 재현 할 수없는 Xcode의 이상한 버그 중 하나라고 생각합니다. IB에서 하나의 특정 UILabel로 문제를 좁혔습니다. 에 연결하자마자이 IBOutlet UILabel *오류가 발생합니다.

추가 조사에서 그 이름 title이 문제를 일으키는 것으로 밝혀졌습니다 . 나는 라벨을 다음과 같이 선언했다.

IBOutlet UILabel *title;

이름을으로 변경하자마자 gtitle모든 것이 예상대로 작동했습니다. 누가 알아?..


이 시도 :

self.view.backgroundColor = [UIColor clearColor];
self.view.layer.backgroundColor = [[UIColor alloc] initWithPatternImage:img].CGColor;

이것은 확실히 "과도하게 릴리스 된"문제처럼 보입니다.

그 이유는 (코드가 절대적으로 괜찮아 보이기 때문에) 당신의 예제에서 말하기는 어렵지만 (대신)의 copyWithZone인스턴스 에서 선택기를 보내고 있다는 사실 은 분명히이 UILabel(가 UIColor) bg과도하게 릴리스되었으며 현재 참조하고 있음을 알려줍니다. A와 UILabel.

나중에 코드에서 객체를 다시 해제하지 않는지 확인하십시오 bg.

도움이 되었기를 바랍니다

첫 번째 댓글 후에 수정

이것은 당신이를 받고 있다는 것이 매우 이상합니다 copyWithZone unrecognized selector sent to instance. 왜냐하면 당신 self.view이 잘못된 유형 (a가 UIView아님)이라면 당신은 a setBackgroundColor unrecognized selector sent to instance가 아니라 a를 받을 것이라고 믿기 때문 copyWithZone입니다.

이 문제를 더 잘 분석하기 위해 예외가 발생하면 디버거에 작성합니다.

po [self view]
po [[self view] backgroundColor]

모든 것이 원활하게 진행되고 있는지 확인합니다.


이 문제는 지난 밤 나에게 발생했으며 실제로 제목이라는 레이블이 있습니다. 이름을 다른 이름으로 변경해도 효과가 없었을 때 머리카락이 약간 찢어졌습니다. 텍스트 필드에서 VC의 레이블로 NIL 값을 보내려고 한 것으로 나타났습니다. 4 개의 VC가 있고 사용자가 텍스트 필드의 VC 1에 제목을 입력하면 NSString 유형의 개체에 저장됩니다. 이 문자열은 VC 4의 레이블에 배치됩니다. 사용자가 VC 1에 제목을 입력하지 않으면 NIL이 들어 왔습니다. 사용자가 VC1에 제목을 입력하지 않을 때 문자열 개체에 기본값을 할당하여 수정했습니다. 누군가에게 도움이되기를 바랍니다.


여기에 제공된 답변을 사용하여 해결할 수 있었던 비슷한 문제가 있습니다.

그러나 제 경우에는 UIDateLabel이라는 클래스가 있습니다 (형식이 지정된 방식으로 날짜를 표시하는 데 사용됨). 컴파일하고 실행하면 위에서 언급 한 NSInvalidArgumentException이 발생했습니다.

나는 그런 클래스가 있을지도 모른다고 생각했지만 UIDateLabel에 대한 인터넷 검색은 모호한 히트 만 보여줬다 (내가 볼 수 있듯이 애플에 연결된 것은 없었다). 그래서 잠시 동안 이름 지정 문제가 없다고 생각했습니다. 여기에있는 답변을 읽고 시도해보기 전까지.

그래서 이름을 UIDateLabelAbc로 바꾸었고 모든 것이 완벽하게 작동합니다. UIDateLabel로 다시 이름을 바꾸면 XCode에서 해당 이름의 클래스가 이미 있다고 알려 주므로 작동하지 않습니다. 그래서 더 많은 인터넷 검색을했고 UIKit.framework 상속 계층 구조를 나열한다고 주장하는 위키 페이지를 찾았고 그 목록에서 UIDateLabel이 나열된 것을 발견했습니다. 그러나 그것이 내가 그 클래스에 대해 찾을 수 있었던 모든 정보, 즉 그것이 존재한다는 것입니다. 그것이하는 일, 목적 등은 현재 나에게 알려지지 않았습니다.

업데이트 : 명명 규칙에 대해 읽은 후 이제 클래스에 UI 접두사를 붙이는 것이 좋지 않다는 것을 알게되었습니다. 따라서 클래스에 UI를 접두사로 붙이지 마십시오. 그러면이를 피할 수 있으며 다른 여러 문제를 피할 수 있습니다.


IBOutlet 변수를 선언 할 때이 오류가 발생하고 해당 뷰 컨트롤러의 다른 이름과 동일한 이름을 지정합니다. 내 변수와 함수의 이름을 더 현명하게 변경하여 문제를 해결했습니다.


내 케이스의 Swift 5

YOURBUTTON.addTarget(self, action: #selector(funCross), for: .touchUpInside)

//MARK:- My Function 
@objc func funWithSearch(screen: String)
{

}

if you focus on #selector(funCross) i am calling a function without object

내가 이것을 사용하면 잘 작동합니다.

YOURBUTTON.addTarget(self, action: #selector(funTemp), for: .touchUpInside)

//MARK:- My Function 
@objc func funTemp()
{
    funWithSearch(screen: "etc your desire string")
}

//MARK:- My Function 
@objc func funWithSearch(screen: String)
{

}

참고 URL : https://stackoverflow.com/questions/10784207/uilabel-copywithzone-unrecognized-selector-sent-to-instance

반응형