2012-08-23 3 views
0

NSObject를 확장하는이 BasicNode 인터페이스가 있습니다. NSObject를 NSDictionary의 키로 사용 하시겠습니까?

은 어떤 시점에서, 나는 사전에 열쇠로 그것의 인스턴스를 사용해야합니다

BasicNode *node = [BasicNode node]; 
[aMutableDictionary setObject:@"hello" forKey:node] 

이 프로그램, "신호 SIGABRT를"충돌합니다. Java에서 해시 맵은 객체에 대한 기본 해시 메소드를 호출하여 키를 가져옵니다. 개체를 NS (Mutbale) Dictionary의 키로 사용할 수 있도록 objC에서 구현할 수있는 메커니즘이 있습니까?

+1

스택 트레이스가 충돌 할 때 표시되는 내용은 무엇입니까? –

+0

*** 캐치되지 않은 예외 'NSInvalidArgumentException'으로 인해 앱을 종료합니다. 이유 : '- [BasicNode copyWithZone :] : 인스턴스로 전송 된 인식 할 수없는 선택기 0x7fee2304f000' *** – Jem

+0

게시물에 사용하는 태그로 기술을 설명하기에 충분합니다. 당신이 사용하고있는 제목에이를 지정할 필요가 없습니다. – davidbuzatto

답변

2

예, 당신은 키와 같은 NSObject의 상속을 사용할 수 있지만

+ (id)copyWithZone:(NSZone *)zone 

메소드를 구현해야하며,이 키로서 사용하기위한 요구 사항입니다. 는 자신의 클래스가이 같은 것입니다 구현하려면 :

- (id)copyWithZone:(NSZone *)zone { 
     MyObject *objectCopy = [[MyObject allocWithZone:zone] init]; 
     // Copy over all instance variables from self to objectCopy. 
     // Use deep copies for all strong pointers, shallow copies for weak. 
     return objectCopy; 
} 

this 블로그 게시물에서입니다!

행운을 빈다.

+0

안녕하세요, 스택 추적 (위의 주석 참조) 주어진 copyWithZone 인식 된 선택기 아닌 것 같습니다? – Jem

+0

클래스가 NSCopying 프로토콜을 구현하지 않습니다. 자신의 BasicNode 클래스에서 NSCopying을 구현하지 않으면 is는 -copyWithZone :에 응답하지 않습니다. – ingaham

+0

괜찮 았지만 첫 번째 대답에서는 "(...) 메소드를 구현하기 때문에 NSObject 상속을 Key로 사용할 수 있습니다"라고 명시했습니다. – Jem

관련 문제