Ошибка 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 не реализует метод "параметров".

Сегодня я провел все утро, настраивая несколько библиотек, чтобы избежать сбоев. Здесь вы можете скачать пример проекта, который я создал, чтобы опубликовать в твиттере фотографию с сообщением.

TestTwitpic

В проекте есть все последние версии всех библиотек от 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"]]];

Если вы хотите создать свой собственный проект на основе этого образца. Сделайте следующее:

  1. Импортируйте в свой проект (перетащите) папку Twitpic со всеми библиотеками, которые находятся внутри.
  2. Добавьте эти рамки в ваш проект:
    • CoreGraphics
    • libz.1.2.3
    • libxml2
    • MobileCoreServices
    • Конфигурация системы
    • CFNetwork
    • Безопасность
  3. В настройках сборки добавьте "$SDKROOT/usr/include/libxml2" в "Пути поиска по заголовку" (пометьте его как рекурсивный)
  4. В настройках сборки добавьте -lxml2 к "Другие флаги компоновщика".

Если вы хотите узнать, что я сделал для исправления библиотек, я расскажу вам более или менее то, что, как я помню, я сделал:

  1. Импортируйте библиотеки Twitter+Oauth, GSTwitPicEngine, OARequestHeader, TouchJSON и ASIHTTPRequest.
  2. Задавать GSTwitPicEngine использовать TouchJSON вместо YAJL,
  3. Добавлена ​​категория NSString+URLEncoding от проекта github oauth-consumer, так как в OARequestHeader его не было.
  4. Изменены все вхождения NSDictionary* foo = [параметры toke ] внутри OARequestHeader со строкой:
    • NSDictionary *foo = [NSDictionary dictionaryWithObject:[token key] forKey:@"oauth_token"];
  5. Создал метод getAccessToken в SAOAuthTwitterEngine для возврата закрытой переменной _accessToken.
  6. В запросе Закончено: внутри 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

Другие вопросы по тегам