2010-08-06 6 views
0

나는이 MD5 algorithm을 실행하려고하는데, 이것은 this post on stackoverflow에 있습니다. 그러나 나는 다음과 같은 오류 점점 계속 : 내 문자열이 UTF-8 인 함께 할 수있는 뭔가가있을 수 있습니다 나는 비록MD5 알고리즘을 사용할 때의 오류

2010-08-06 14:45:40.971 Intel[3195:a0f] -[TaskController md5:]: unrecognized selector sent to instance 0x108df0 
2010-08-06 14:45:40.973 Intel[3195:a0f] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[TaskController md5:]: unrecognized selector sent to instance 0x108df0' 
*** Call stack at first throw: 
(
0 CoreFoundation      0x9875abba __raiseError + 410 
1 libobjc.A.dylib      0x96a3a509 objc_exception_throw + 56 
2 CoreFoundation      0x987a78db -[NSObject(NSObject) doesNotRecognizeSelector:] + 187 
3 CoreFoundation      0x987017e6 ___forwarding___ + 950 
4 CoreFoundation      0x987013b2 _CF_forwarding_prep_0 + 50 
5 Intel        0x00003143 -[TaskController findFileOrCreateFile] + 709 
6 Intel        0x00002d29 -[TaskController init] + 92 
7 Intel        0x00002c03 main + 128 
8 Intel        0x00002a6a start + 54 
) 

을, 그러나 나는 시도 다음 문자열을 입력하고 여전히 오류를 얻을 :

NSString *foo = @"your text here"; 
const char *bar = [foo UTF8String]; 

어떤 도움이 필요합니까?

고마워요

답변

2

문자열 형식과 아무런 관련이 없습니다. 런타임에서 md5 메소드를 찾고 있지만 찾지 못했습니다. TaskController 객체의 @interface 섹션에서 정의 했습니까? 적절한 수의 매개 변수로 정의/호출 했습니까?

+0

감사합니다. 메소드를 공개에서 비공개로 전환했습니다. 즉, '+'에서 '-'로 전환하면 트릭을 수행합니다. 잘 했어! –

+4

+ - 메소드가 공개인지 비공개인지 상관하지 않습니다. 메서드가 클래스 메서드 (+)인지 인스턴스 메서드 (-)인지 여부를 결정합니다. http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ObjectiveC/Articles/ocDefiningClasses.html#//apple_ref/doc/uid/TP30001163-CH12-SW1을 참조하십시오. – wadesworld

0

는 예외 메시지를 읽고 :

-[TaskController md5:]: unrecognized selector sent to instance 0x108df0 

당신은 이러한 메시지를 인식하지 않는 인스턴스에 md5: 메시지를 보내려고.

5 Intel        0x00003143 -[TaskController findFileOrCreateFile] + 709 

그리고 여기에서 전송을 시도한 곳입니다.

Wade Williams의 대답에 대한 귀하의 의견을 통해 알 수 있듯이 문제의 원인은 해당 메서드를 클래스 메서드 (+[TaskController md5:])로 선언하고 정의했기 때문입니다. 선언문에 예외가 + 표시되어있는 부분에 유의하십시오. 문제는 불일치입니다.

TaskController 클래스가 아닌 TaskController 인스턴스로 메시지를 보내려고 했으므로 해결 방법은 선언을 인스턴스 메서드 (예외 메시지 에서처럼 -[TaskController md5:])로 변경하는 것이 었습니다. 다른 해결책은 클래스 메소드로 남겨두고 메시지 표현식을 변경하여 인스턴스가 아닌 클래스에 메시지를 전송하는 것입니다 (hash = [TaskController md5:str]).

관련 문제