2010-08-06 9 views
0

J'essaie d'exécuter ce MD5 algorithm, que j'ai trouvé sur this post on stackoverflow. Mais je continue à obtenir l'erreur suivante:Erreur lors de l'utilisation de l'algorithme 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 
) 

Je pensais qu'il pourrait avoir quelque chose à voir avec ma chaîne étant UTF-8, mais je l'ai essayé entrer la chaîne suivante et obtenez toujours des erreurs:

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

Une aide?

Merci beaucoup

Répondre

2

Il n'a rien à voir avec le format de votre chaîne. Le moteur d'exécution recherche votre méthode md5 et ne la trouve pas. L'avez-vous défini dans votre section @interface de votre objet TaskController? Avez-vous défini/appelé avec le bon nombre de paramètres?

+0

Merci de le signaler. Je viens de passer la méthode du public au privé, c'est-à-dire de '+' à '-' et cela a fait l'affaire. Bien joué! –

+4

+ et - n'ont rien à voir avec le fait qu'une méthode soit publique ou privée. Ils déterminent si une méthode est une méthode de classe (+) ou une méthode d'instance (-). Voir http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ObjectiveC/Articles/ocDefiningClasses.html#//apple_ref/doc/uid/TP30001163-CH12-SW1 – wadesworld

0

Lire le message d'exception:

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

Vous avez essayé d'envoyer un message md5: à une instance qui ne reconnaît pas ces messages.

5 Intel        0x00003143 -[TaskController findFileOrCreateFile] + 709 

Et c'est là que vous avez essayé de l'envoyer.

Comme vous l'avez révélé dans votre commentaire sur la réponse de Wade Williams, la cause de votre problème était que vous aviez déclaré et défini la méthode comme méthode de classe (+[TaskController md5:]). Notez comment votre déclaration a un + où l'exception montre un -; le problème est la discordance. Comme vous envoyiez le message à une instance de TaskController, pas à la classe TaskController, la solution devait et devait modifier la déclaration à une méthode d'instance (-[TaskController md5:], comme le dit le message d'exception). L'autre solution aurait été de le laisser comme une méthode de classe et de changer l'expression du message pour envoyer le message à la classe plutôt qu'à une instance (hash = [TaskController md5:str]).