2010-07-26 2 views
1

J'ai essayé d'obtenir OAuth pour Twitter pour travailler sur mon application iPhone pour les deux derniers jours, et je ne peux pas pour la vie de moi comprendre pourquoi je reçois cette erreur. J'ai changé la façon dont j'ai approché cela depuis un moment maintenant, mais toujours rien. Je me tourne donc vers SO pour espérer le comprendre.Erreur "sélecteur non reconnu". Je ne peux pas le comprendre

Le tutoriel est linked here. Télécharger l'application et l'exécuter fonctionne PARFAITEMENT. Ça ne marche pas pour moi.

Voici l'erreur que je reçois -

2010-07-25 20:04:52.224 AppTest[4620:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[OAToken setVerifier:]: unrecognized selector sent to instance 0x6c2acc0' 

Tout le monde peut me dire ce que je fais mal? J'utilise à peu près le même code.

EDIT: Voici le code où j'utilise setVerifier:

- (IBAction)finishSetup:(id)sender { 

     NSString *thePin = [[NSString alloc] initWithString:pinText.text]; 
     NSLog(@"%@", thePin); 
     if([thePin length] == 7 && [[NSScanner scannerWithString:thePin] scanInt:NULL]) { 

      loadingView.hidden = NO; 

      [pinText resignFirstResponder]; 

      OAConsumer *consumer = [[OAConsumer alloc] initWithKey:consumer_key secret:consumer_secret]; 
      OADataFetcher *fetcher = [[OADataFetcher alloc] init]; 
      NSURL *url = [NSURL URLWithString:@"https://api.twitter.com/oauth/access_token"]; 

      [accessToken setVerifier:pinText.text]; 

      NSLog(@"Using PIN %@", accessToken.verifier); 
      OAMutableURLRequest *request = [[OAMutableURLRequest alloc] initWithURL:url consumer:consumer token:accessToken realm:nil signatureProvider:nil]; 
      [request setHTTPMethod:@"POST"]; 

      NSLog(@"Getting access token..."); 

      [fetcher fetchDataWithRequest:request delegate:self didFinishSelector:@selector(accessTokenTicket:didFinishWithData:) didFailSelector:@selector(accessTokenTicket:didFailWithError:)]; 

     } else { 

      loadingView.hidden = YES; 
      error_alert = [[UIAlertView alloc] initWithTitle:@"TestApp" message:@"The PIN you have entered is invalid. Please try again." delegate:self cancelButtonTitle:@"Cancel Login" otherButtonTitles:@"Try again", nil]; 
      [error_alert show]; 
      [error_alert release]; 

     } 

     [thePin release]; 

    } 
+0

"utiliser à peu près le même code" n'est pas la même chose que "utiliser le même code". Si c'est différent, postez-le dans votre question. –

+0

c'est le même code, mes excuses. La seule différence est que le tutoriel n'est pas pour l'iPhone, mais utilise Objective-C et Cocoa. –

+0

vous devriez poster le code où vous utilisez '- [OAToken setVerifier:]' – kubi

Répondre

0

Si cela fonctionne, le nouveau XCode 4 est incroyable. J'ai téléchargé le fichier ZIP sur le tutoriel que vous avez lié et il semble que OAMutableURLRequest.m ait des erreurs dans tout le fichier en pensant que NSString répond à URLEncodedString.

Essayez la mise à jour URLEncodedString à

stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding 

Laissez-moi savoir si cela fonctionne!

+0

Tout le XCode4 est activé par défaut l'analyse statique. Vous pouvez obtenir la même information dans l'ancien XCode en faisant un "Build And Analyze" –

0

Essayez

[accessToken setVerifier:thePin]; 
0

Je pense que BarrettJ a. L'argument setVerifier attend un NSString. Puisque vous fournissez quelque chose d'autre, il cherche un autre setVerifier qui correspond à la signature et ne le trouve pas. Cela entraînerait l'erreur "Sélecteur non reconnu".

1

accessToken setVerifier: attend à une NSString *

thePin et pinText.text sont tous les deux NSString *

vraiment besoin de montrer où vous instancier la variable accessToken.

1

Je suis l'auteur de l'article que vous avez lié ici.

La raison pour laquelle vous obtenez cette erreur est que vous utilisez la mauvaise version de OAuthConsumer. Il existe plusieurs versions disponibles, et la plupart d'entre elles n'ont pas le champ "verifier" dans OAToken et renverront l'erreur que vous voyez si vous essayez de l'utiliser. L'exemple de projet de ma publication contient la version OAuthVerifier correcte, c'est pourquoi cela fonctionne.

J'ai mis à jour mon message avec un fichier ZIP contenant uniquement OAuthConsumer. Vous pouvez l'utiliser dans votre projet et cela fonctionnera. Bien sûr, vous pouvez également copier uniquement les fichiers OAuthConsumer de mon exemple de projet et les utiliser dans le vôtre, cela fonctionnera également.

+0

Je crois qu'une autre option aurait été de faire un appel comme [request setOAuthParameterName: @ "oauth_verifier" withValue: oauthVerifierString] –

0

ajouter -all_load drapeau dans la construction mise

https://developer.apple.com/library/mac/#qa/qa2006/qa1490.html

-all_load oblige l'éditeur de liens pour charger tous les fichiers d'objets de toutes les archives qu'il voit, même sans code Objective-C. -force_load est disponible en Xcode 3.2 et versions ultérieures.Cela permet un contrôle plus fin du chargement des archives. Chaque option -force_load doit être suivie d'un chemin vers une archive et chaque fichier objet de cette archive sera chargé.