Я пытался заставить OAuth для Твиттера работать над моим приложением для iPhone в течение последних дней, и я не могу ни за что в жизни выяснить, почему я получаю эту ошибку. Я изменил способ, которым я приближался к этому некоторое время теперь, но тем не менее ничему. Таким образом, я обращаюсь к ТАК для обнадеживающего понимания этого.
Учебное руководство связано здесь. Загружение приложения и выполнение его работают ОТЛИЧНО. Это не работает на меня.
Вот ошибка, которую я получаю -
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'
Кто-либо может сказать мне, что я делаю неправильно? Я использую в значительной степени тот же код.
Править: Вот код, где я использую 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];
}
Если это сработает, новый XCode 4 просто великолепен. Я загрузил ZIP-файл из учебника, который вы связали, и похоже, что OAMutableURLRequest.m имеет ошибки во всем файле, думая, что NSString отвечает на URLEncodedString.
Попробуйте обновить URLEncodedString до
stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding
Сообщите мне, если это сработает!
Я думаю, что BarrettJ разобрался. Аргумент setVerifier ожидает NSString. Поскольку вы передаете что-то другое, он ищет другой setVerifier, который соответствует сигнатуре, и не находит его. Это приведет к ошибке "Unrecognized Selector".
accessToken setVerifier: ожидает NSString *
thePin и pinText.text оба являются NSString *
На самом деле нужно показать, где вы создаете экземпляр переменной accessToken.
Я автор сообщения, на которое вы ссылаетесь отсюда.
Причина, по которой вы получаете эту ошибку, заключается в том, что вы используете неправильную версию OAuthConsumer. Доступно несколько версий, и большинство из них не имеют поля «верификатор» в OAToken и вернут ошибку, которую вы видите, если вы попытаетесь ее использовать. Пример проекта из моего сообщения содержит правильную версию OAuthVerifier, поэтому он работает.
Я обновил свое сообщение с помощью ZIP-файла, содержащего только OAuthConsumer. Вы можете использовать его в своем проекте, и он будет работать. Конечно, вы также можете скопировать только файлы OAuthConsumer из моего демонстрационного проекта и использовать в своем, это тоже сработает.