2010-07-26 3 views
1

Я пытаюсь получить OAuth для Twitter для работы над своим iPhone-приложением в течение последних нескольких дней, и я не могу на всю жизнь понять, почему я получаю эту ошибку. Я изменил способ, которым я подходил к этому какое-то время, но все равно ничего. Поэтому я обращаюсь к SO, чтобы, надеюсь, понять это.Ошибка «непризнанного селектора». Не могу понять это

Уроки linked here. Загрузка приложения и запуск его работы ОТЛИЧАЮТСЯ. Это не работает для меня.

Вот ошибка я получаю -

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' 

Любой человек может сказать мне, что я делаю неправильно? Я использую почти тот же код.

EDIT: Вот код, где я использую 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

«в значительной степени с использованием того же кода» - это не то же самое, что «с использованием того же кода». Если все по-другому, опубликуйте его в своем вопросе. –

+0

это тот же код, мои извинения. Единственное отличие состоит в том, что учебник предназначен не для iPhone, а для использования Objective-C и Cocoa. –

+0

вы должны разместить код, в котором вы используете '- [OAToken setVerifier:]' – kubi

ответ

0

Если это работает, новый XCode 4 поражает. Я загрузил ZIP-файл в учебное пособие, которое вы связали, и похоже, что OAMutableURLRequest.m имеет ошибки во всем файле, думая, что NSString отвечает на URLEncodedString.

Попробуйте обновить URLEncodedString к

stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding 

Позвольте мне знать, если это работает!

+0

Все XCode4 по умолчанию включает статический анализ. Вы можете получить ту же информацию в старом XCode, выполнив «Build And Analyze» –

0

Я думаю BarrettJ имеет его. Аргумент setVerifier ожидает NSString. Поскольку вы поставляете что-то еще, он ищет другой setVerifier, который соответствует сигнатуре и не находит его. Это приведет к ошибке «Unrecognized Selector».

1

setVerifier маркер доступа: ожидает NSString *

thePin и pinText.text оба NSString *

Действительно нужно показать, где вы экземпляр переменной маркер доступа.

1

Я являюсь автором сообщения, которое вы связали здесь.

Причина, по которой вы получаете эту ошибку, заключается в том, что вы используете неправильную версию OAuthConsumer. Доступно несколько версий, и большинство из них не имеют поля «verifier» в OAToken и возвращают ошибку, которую вы видите, если пытаетесь ее использовать. Пример проекта из моего сообщения содержит правильную версию OAuthVerifier, поэтому он работает.

Я обновил сообщение с ZIP-архивом, содержащим только OAuthConsumer. Вы можете использовать его в своем проекте, и он будет работать. Конечно, вы также можете скопировать только файлы OAuthConsumer из моего образца проекта и использовать его в своей, он также будет работать.

+0

. Я считаю, что другой вариант заключался бы в вызове типа [request setOAuthParameterName: @ «oauth_verifier» withValue: oauthVerifierString] –

0

добавить -all_load флаг в строй установки

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

-all_load заставляет компоновщик, чтобы загрузить все объектные файлы из каждой архивировать он видит, даже те, без кода Objective-C. -force_load доступен в Xcode 3.2 и более поздних версиях.Это позволяет контролировать зернистость зернохранилища. Каждой опции -force_load должен следовать путь к архиву, и каждый объектный файл в этом архиве будет загружен.

Смежные вопросы