setAccessToken时出现twitpic API GSTwitPicEngine错误

Ami*_*tan 1 api cocoa-touch twitpic ios4 twitter-oauth

我尝试使用GSTwitPicEngine类https://github.com/Gurpartap/GSTwitPicEngine在twitter上分享图片
但是它给出错误

因为我们必须设置[twitpicEngine setAccessToken:token];
我是否正确,我使用_accessTokenSA_OAuthTwitterEngine作为标记

_accessToken在课堂上是私人的SA_OAuthTwitterEngine,我把它设置为公开的

@property (nonatomic, readonly) OAToken *accessToken;
@synthesize accessToken = _accessToken;
Run Code Online (Sandbox Code Playgroud)

然后在行动

twitPicEngine = [GSTwitPicEngine twitpicEngineWithDelegate:self];
[twitPicEngine setAccessToken:twitterObj.accessToken];
[twitPicEngine uploadPicture:[shareDict objectForKey:@"image"] withMessage:[shareDict objectForKey:@"image_msg"]];
Run Code Online (Sandbox Code Playgroud)

但是,当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'
Run Code Online (Sandbox Code Playgroud)

如果你能找到任何错误,请帮忙

阿米特巴图

Mon*_*tus 7

不幸的是,GSTwitPicEngine并没有使用相同版本的oauth-consumer而不是神话般的Twitter + Oauth库(SAOAuthTwitterEngine).我假设您正在使用该库向Twitter发送消息.

崩溃是因为来自Twitter + Oauth的OAToken没有实现"参数"方法.

今天我花了整整一个上午调整了几个库来避免崩溃.在这里,您可以下载我创建的示例项目,用于将带有消息的twitpic照片发布到twitter.

TestTwitpic

该项目拥有github所有库的所有最新版本.

使我的TestTwitpic项目工作的说明:

在TestTwitpic-Prefix.pch中设置变量:

#define kTwitterOAuthConsumerKey @""
#define kTwitterOAuthConsumerSecret @""
#define kTwitPicAPIKey @""
Run Code Online (Sandbox Code Playgroud)

在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"];
Run Code Online (Sandbox Code Playgroud)

并且这个改变发送给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"]]];
Run Code Online (Sandbox Code Playgroud)

如果要根据此示例创建自己的项目.请执行下列操作:

  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. 添加了来自oauth-consumer github项目的类别NSString + URLEncoding,因为OARequestHeader缺少它.
  4. 使用以下行修改了OARequestHeader中出现的所有NSDictionary*foo = [toke参数] :
    • NSDictionary *foo = [NSDictionary dictionaryWithObject:[token key] forKey:@"oauth_token"];
  5. 在SAOAuthTwitterEngine中创建了一个方法getAccessToken,以返回私有_accessToken变量.
  6. 在requestFinished中:在GSTwitPicEngine里面
    • 换行:
      • response = [[CJSONDeserializer deserializer] deserialize:responseString error:&error];
    • 与线:
      • response = [[CJSONDeserializer deserializer] deserialize:[responseString dataUsingEncoding:NSUTF8StringEncoding] error:&error];
    • 因为GSTwitPicEngine错误地假设反序列化:error:方法接受NSString而不是NSData.

  • 这是错误2012-07-05 19:18:22.380 TestTwitpic [8577:f803]数据:( null)2012-07-05 19:18:40.648 TestTwitpic [8577:f803]为(null)认证2012-07- 05 19:18:40.649 TestTwitpic [8577:f803]***由于未捕获的异常'NSInvalidArgumentException'终止应用程序,原因:'*** - [__ NSPlaceholderDictionary initWithObjects:forKeys:count:]:尝试从对象插入nil对象[ 0]'***第一次投掷堆栈: (2认同)