Ошибка twitpic API GSTwitPicEngine при установке setAccessToken
Я пытался использовать класс GSTwitPicEngine https://github.com/Gurpartap/GSTwitPicEngine для обмена изображениями в твиттере
но это дает ошибку
Как мы должны установить [twitpicEngine setAccessToken:token];
если я прав, я использую _accessToken
класса SA_OAuthTwitterEngine
как знак
_accessToken
был частным в классе SA_OAuthTwitterEngine
Я установил это для общественности, а также
@property (nonatomic, readonly) OAToken *accessToken;
@synthesize accessToken = _accessToken;
а затем в действии
twitPicEngine = [GSTwitPicEngine twitpicEngineWithDelegate:self];
[twitPicEngine setAccessToken:twitterObj.accessToken];
[twitPicEngine uploadPicture:[shareDict objectForKey:@"image"] withMessage:[shareDict objectForKey:@"image_msg"]];
Но приложение получает сбой, пока set AccessToken с журналом
-[OAToken parameters]: unrecognized selector sent to instance 0x6327e30
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[OAToken parameters]: unrecognized selector sent to instance 0x6327e30'
Пожалуйста, помогите, если вы можете найти что-то неправильно
Амит Баттан
2 ответа
К сожалению, GSTwitPicEngine не использует ту же версию oauth-consumer, что и потрясающая библиотека Twitter+Oauth (SAOAuthTwitterEngine). Я предполагаю, что вы используете эту библиотеку для публикации сообщений в твиттере.
Сбой в том, что OAToken из Twitter+Oauth не реализует метод "параметров".
Сегодня я провел все утро, настраивая несколько библиотек, чтобы избежать сбоев. Здесь вы можете скачать пример проекта, который я создал, чтобы опубликовать в твиттере фотографию с сообщением.
В проекте есть все последние версии всех библиотек от github.
Инструкция по созданию моего проекта TestTwitpic:
В TestTwitpic-Prefix.pch установите переменные для:
#define kTwitterOAuthConsumerKey @""
#define kTwitterOAuthConsumerSecret @""
#define kTwitPicAPIKey @""
В RootViewController вы можете изменить эти строки в соответствии с вашими потребностями. Чтобы изменить фотографию:
//change [UIImage imageNamed:@"image.jpg"] for whatever UIImage you want to upload
//change @"my photo" for whatever title you want for your photo in twitpic website
[twitpicEngine uploadPicture:[UIImage imageNamed:@"image.jpg"] withMessage:@"my photo"];
и этот, чтобы изменить сообщение, отправленное в твиттер:
//I post to twitter the title of the photo and the twitpic url but you can post whatever you want
[engine sendUpdate:[NSString stringWithFormat:@"%@ %@", [[[response objectForKey:@"request"] userInfo] objectForKey:@"message"], [[response objectForKey:@"parsedResponse"] objectForKey:@"url"]]];
Если вы хотите создать свой собственный проект на основе этого образца. Сделайте следующее:
- Импортируйте в свой проект (перетащите) папку Twitpic со всеми библиотеками, которые находятся внутри.
- Добавьте эти рамки в ваш проект:
- CoreGraphics
- libz.1.2.3
- libxml2
- MobileCoreServices
- Конфигурация системы
- CFNetwork
- Безопасность
- В настройках сборки добавьте "$SDKROOT/usr/include/libxml2" в "Пути поиска по заголовку" (пометьте его как рекурсивный)
- В настройках сборки добавьте -lxml2 к "Другие флаги компоновщика".
Если вы хотите узнать, что я сделал для исправления библиотек, я расскажу вам более или менее то, что, как я помню, я сделал:
- Импортируйте библиотеки Twitter+Oauth, GSTwitPicEngine, OARequestHeader, TouchJSON и ASIHTTPRequest.
- Задавать
GSTwitPicEngine
использоватьTouchJSON
вместоYAJL
, - Добавлена категория NSString+URLEncoding от проекта github oauth-consumer, так как в OARequestHeader его не было.
- Изменены все вхождения NSDictionary* foo = [параметры toke ] внутри OARequestHeader со строкой:
NSDictionary *foo = [NSDictionary dictionaryWithObject:[token key] forKey:@"oauth_token"];
- Создал метод getAccessToken в SAOAuthTwitterEngine для возврата закрытой переменной _accessToken.
- В запросе Закончено: внутри GSTwitPicEngine
- изменить строку:
response = [[CJSONDeserializer deserializer] deserialize:responseString error:&error];
- с линией:
response = [[CJSONDeserializer deserializer] deserialize:[responseString dataUsingEncoding:NSUTF8StringEncoding] error:&error];
- поскольку GSTwitPicEngine ошибочно предположил, что deserialize:error: метод принимает строку NSString вместо NSData.
- изменить строку:
Вы можете установить токен доступа и секрет доступа для twitpic после получения из движка Twitter, т.е.
SA_OAuthTwitterEngine.m
- (void) setAccessToken: (OAServiceTicket *) билет с данными: (NSData *)
Создайте объект класса "GSTwitPicEngine.m" в "SA_OAuthTwitterEngine.m" и передайте токен доступа и секрет доступа "GSTwitPicEngine.m" и установите методы делегата "GSTwitPicEngine.m" в "SA_OAuthTwitterEngine.m"
И еще одно изменение...
должен проверять URLEncoding при генерации заголовка OAuth, т.е.
[requestHeader generateRequestHeaders]
это будет в соответствии с классами "OAuthConsumer" в библиотеке Twitter