Ошибка twitpic API GSTwitPicEngine при установке setAccessToken - PullRequest
1 голос
/ 08 апреля 2011

Я пытался использовать класс GSTwitPicEngine https://github.com/Gurpartap/GSTwitPicEngine для обмена изображениями в твиттере
, но с ошибкой его выдачи

Поскольку мы должны установить [twitpicEngine setAccessToken:token];
, если я прав, яЯ использую _accessToken класса SA_OAuthTwitterEngine в качестве токена

_accessToken был закрыт в классе SA_OAuthTwitterEngine, я установил его как public, а также

@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"]];

Но приложение получает сбой при установке setAccessToken с журналом

-[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 ]

7 голосов
/ 29 апреля 2011

К сожалению, GSTwitPicEngine не использует ту же версию oauth-consumer, что и потрясающая библиотека Twitter + Oauth (SAOAuthTwitterEngine).Я предполагаю, что вы используете эту библиотеку для отправки сообщений в твиттер.

Сбой в том, что OAToken из Twitter + Oauth не реализует метод "параметров".

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

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 = [параметры токена] внутри OARequestHeader со строкой:
    • NSDictionary *foo = [NSDictionary dictionaryWithObject:[token key] forKey:@"oauth_token"];
  5. Создал метод getAccessToken в SAOAuthTwitterEngine для возврата закрытой переменной _accessToken.
  6. In requestFinished: внутри GSTwitPicEngine
    • изменить строку:
      • response = [[CJSONDeserializer deserializer] deserialize:responseString error:&error];
    • со строкой:
      • response = [[CJSONDeserializer deserializer] deserialize:[responseString dataUsingEncoding:NSUTF8StringEncoding] error:&error];
    • , поскольку GSTwitPicEngine ошибочно принял десериализацию: ошибка: метод принимает строку NSString вместо NSData.
0 голосов
/ 12 октября 2012

Вы можете установить токен доступа и секрет доступа для twitpic после получения из движка Twitter, т.е.

SA_OAuthTwitterEngine.m

  • (void) setAccessToken: (OAServiceTicket *) тикет с данными: (NSData *) data

Создать объект класса «GSTwitPicEngine.m» в «SA_OAuthTwitterEngine.m» и передать токен доступа и секрет доступа в «GSTwitPicEngine.m» и установить методы делегата «GSTwitPicEngine.m»"in" SA_OAuthTwitterEngine.m "

И еще одно изменение ...

должно проходить перекрестную проверку URLEncoding при генерации заголовка OAuth, т.е.

[requestHeader generateRequestHeaders]

это будет в соответствии с классами "OAuthConsumer" в библиотеке Twitter

...