2011-03-01 4 views
0

나는 다음 오류로 인해 내 응용 프로그램의 충돌을 얻고있다 :"인스턴스로 전송 된 인식 할 수없는 선택기"오류의 의미는 무엇입니까?

-[NSCFString count]: unrecognized selector sent to instance 0x612b060 

사람은 무슨 뜻이며 어떻게 당신이 0x612b060

+0

을 참조하십시오. –

+0

이 질문은 [this one] (http://stackoverflow.com/questions/3645213) 또는 [many others] (http://stackoverflow.com/search?q=unrecognized+selector)와 거의 같습니다. 질문하기 전에 검색을 시도할까요? – zoul

답변

5

참조하여 내 코드의 라인을 찾을 수 말해 줄 수 해제되거나 아직 초기화되지 않은 객체 (아마 컬렉션, 예 : 배열, 사전 또는 집합)에 count 메서드를 호출합니다.

3

NSCFString에 "count"라는 메시지를 보내면 NSString 데이터 유형에 대해 "count"메소드를 호출합니다.

는 스택 추적을 사용하여 코드를 찾으려면,하지만 난 당신이하고있는 것은 확실하다 :있는 NSArray 또는 (배열 데이터 타입)과 계산하려고에

할당있는 NSString 데이터를.

2

당신이 제대로 유지하지 못하는 컬렉션 객체 (NSArray, NSDictionary 등)가 있기 때문에 이런 일이 발생할 가능성이 큽니다.

NSZombies를 사용하여 출시 된 개체를 찾으십시오.

  1. Xcode의 실행 파일 그룹에서 실행 파일을 마우스 오른쪽 버튼으로 클릭하십시오. 선택 Get Info
  2. 인수 탭을 선택하십시오.
  3. Variables to be set in the environment에서 NSZombieEnabled이라는 변수를 만들고 그 값을 YES으로 설정하십시오. 그것을 활성화하는 것을 잊지 마십시오.
  4. 중단 점을 켜고 코드를 실행하십시오.
  5. 디버거가 사용자에게 조기에 릴리스되는 개체를 가리 키도록 지정합니다.

이 문제를 디버깅 한 후에는 NSZombies를 비활성화해야합니다. NSZombies는 메모리를 해제하지 않고 객체를 릴리스 된 것으로 표시합니다.
그러면 조만간 경고 메시지가 나옵니다.
NSZombies를 비활성화하려면 간단히 앞의 체크 표시를 제거하면됩니다.

+2

아, 코멘트없이 투표를 싫어하는 ... –

0

문자열에 length (으)로 전화하셨습니까?

0

어쩌면 사람이 필요합니다 내가 사용하는 이런 종류의 문제 있었을 때 : [ myarray retain]; myarray = [NSArray arrayWithObjects: ...]; 후에는 그것을했다. 제 어레이가 너무 일찍 파괴 되었기 때문이라고 생각합니다. 하지만이 개체를 어떻게 지금 릴리스 할 수 있는지 알 수 없습니까? 그냥 [myarray autorelease]? 유지할 반대가 있습니까?

+3

StackOverflow에 오신 것을 환영합니다. 대답의 마지막 부분은 질문입니다. 메인 페이지에서 '질문하기'버튼을 사용하십시오. 그렇지 않으면 질문이 커뮤니티에 표시되지 않습니다. –

+0

'retain '과 반대는'release'입니다. 'autorelease'는 현재의 autorelease 풀에 보존 된 객체에 대해'release'를 호출 할 책임이 있습니다. –

0

실제적인 예 :

때때로, 나는 아직 명확하게 이해하지 못하는 실제적인 차이가 있습니다. valueForKey은 SOGo-3.1에서 작동하지 않았습니다.

`EXCEPTION: <NSException: 0x55f43f93e4d0> NAME:NSInvalidArgumentException REASON:-[WOContext ASProtocolVersion]: unrecognized selector sent to instance 

objectForKey 반면 일을 (그리고 코드에서 elesewhere context 객체를 조회하는 일반적인 방법입니다) : 4의 코드는 context 객체에 사용할 수없는 "방법"ASProtocolVersion를 호출하려고합니다.

컴파일러가 사용하는 https://github.com/inverse-inc/sogo/pull/217/files

관련 문제