ошибка "нераспознанный селектор". Не могу понять это - PullRequest
1 голос
/ 26 июля 2010

Последние пару дней я пытался заставить OAuth for Twitter работать над моим приложением для 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];

    }

Ответы [ 6 ]

1 голос
/ 26 июля 2010

Я - автор поста, на который вы ссылались отсюда.

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

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

1 голос
/ 26 июля 2010

accessToken setVerifier: ожидает, что NSString *

thePin и pinText.text оба являются NSString *

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

0 голосов
/ 26 июня 2013

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

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

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

0 голосов
/ 26 июля 2010

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

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

stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding

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

0 голосов
/ 26 июля 2010

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

0 голосов
/ 26 июля 2010

Попробуйте

[accessToken setVerifier:thePin];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...