1

I tried to use GSTwitPicEngine class https://github.com/Gurpartap/GSTwitPicEngine for sharing image on twitter
but its giving error

As we have to set [twitpicEngine setAccessToken:token];
if I am right, I am using _accessToken of class SA_OAuthTwitterEngine as token

_accessToken was private in class SA_OAuthTwitterEngine, I set it to public and also

@property (nonatomic, readonly) OAToken *accessToken;
@synthesize accessToken = _accessToken;

and then in action

twitPicEngine = [GSTwitPicEngine twitpicEngineWithDelegate:self];
[twitPicEngine setAccessToken:twitterObj.accessToken];
[twitPicEngine uploadPicture:[shareDict objectForKey:@"image"] withMessage:[shareDict objectForKey:@"image_msg"]];

But Application getting crash while setAccessToken with log

-[OAToken parameters]: unrecognized selector sent to instance 0x6327e30
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[OAToken parameters]: unrecognized selector sent to instance 0x6327e30'

Please help if you able to find any thing wrong

Amit Battan

4

2 に答える 2

7

残念ながら、GSTwitPicEngine は素晴らしい Twitter+Oauth ライブラリ (SAOAuthTwitterEngine) と同じバージョンの oauth-consumer を使用していません。twitter にメッセージを投稿するためにそのライブラリを使用していると思います。

クラッシュは、Twitter+Oauth の OAToken が「パラメーター」メソッドを実装していないために発生します。

今日は午前中ずっと、いくつかのライブラリを微調整してクラッシュを回避しました。ここでは、私が作成した twitpic の写真をメッセージ付きで 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"];

そして、これはTwitterに送信されたメッセージを変更するものです:

//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. これらのフレームワークをプロジェクトに追加します。
    • コアグラフィックス
    • libz.1.2.3
    • libxml2
    • モバイルコアサービス
    • システム構成
    • CFネットワーク
    • 安全
  3. ビルド設定で、「$SDKROOT/usr/include/libxml2」を「ヘッダー検索パス」に追加します (再帰としてマークします)。
  4. ビルド設定で、「その他のリンカー フラグ」に -lxml2 を追加します。

ライブラリを修正するために私が何をしたかを知りたい場合は、多かれ少なかれ私が行ったことを覚えていることをお話しします。

  1. Twitter+Oauth、GSTwitPicEngine、OARequestHeader、TouchJSON、および ASIHTTPRequest ライブラリをインポートします。
  2. の代わりGSTwitPicEngineに使用するように設定します。TouchJSONYAJL
  3. OARequestHeaderが欠落していたため、oauth-consumer github プロジェクトからカテゴリ NSString+URLEncoding を追加しました。
  4. OARequestHeader内の NSDictionary* foo = [ toke parameters] のすべての出現箇所を次の行で 変更しました。
    • NSDictionary *foo = [NSDictionary dictionaryWithObject:[token key] forKey:@"oauth_token"];
  5. private _accessToken 変数を返すメソッド getAccessToken を SAOAuthTwitterEngine に作成しました。
  6. In requestFinished: GSTwitPicEngine 内
    • 行を変更します。
      • response = [[CJSONDeserializer deserializer] deserialize:responseString error:&error];
    • 次の行で:
      • response = [[CJSONDeserializer deserializer] deserialize:[responseString dataUsingEncoding:NSUTF8StringEncoding] error:&error];
    • GSTwitPicEngine は、deserialize:error: メソッドが NSData の代わりに NSString を受け入れると誤って想定したためです。
于 2011-04-29T13:45:56.153 に答える
0

Twitterエンジンから取得した後、twitpicのアクセストークンとアクセスシークレットを設定できます。

SA_OAuthTwitterEngine.m

  • (void) setAccessToken: (OAServiceTicket *) チケット withData: (NSData *) データ

「SA_OAuthTwitterEngine.m」に「GSTwitPicEngine.m」クラスのオブジェクトを作成し、「GSTwitPicEngine.m」にアクセストークンとアクセスシークレットを渡し、「SA_OAuthTwitterEngine.m」に「GSTwitPicEngine.m」のデリゲートメソッドを設定する

そして、もう1つの変更...

OAuth ヘッダーの生成中に URLEncoding をクロスチェックする必要があります。

[requestHeader generateRequestHeaders]

これは、Twitter Library の「OAuthConsumer」クラスによるものです。

于 2012-10-12T04:50:00.540 に答える