1

我尝试使用 GSTwitPicEngine 类https://github.com/Gurpartap/GSTwitPicEngine在 twitter 上共享图像,
但它给出了错误

如果我是对的,我们必须设置[twitpicEngine setAccessToken:token];
,我使用_accessTokenSA_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"]];

但是应用程序在使用日志的 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'

如果您发现任何错误,请提供帮助

阿米特巴坦

4

2 回答 2

7

不幸的是,GSTwitPicEngine 使用的 oauth-consumer 版本与精彩的 Twitter+Oauth 库 (SAOAuthTwitterEngine) 不同。我假设您正在使用该库向 twitter 发布消息。

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

今天我整个上午都在调整几个库以避免崩溃。在这里,您可以下载我创建的示例项目,用于将 twitpic 照片与消息一起发布到 Twitter。

测试推特图片

该项目具有来自 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. 将这些框架添加到您的项目中:
    • 核心图形
    • libz.1.2.3
    • libxml2
    • 移动核心服务
    • 系统配置
    • CF网络
    • 安全
  3. 在 Build Settings 添加“$SDKROOT/usr/include/libxml2”到“Header Search Paths”(将其标记为递归)
  4. 在 Build Settings 添加 -lxml2 到“Other linker flags”

如果你想知道我为修复库做了什么,我会或多或少地告诉你我记得我做了什么:

  1. 导入 Twitter+Oauth、GSTwitPicEngine、OARequestHeader、TouchJSON 和 ASIHTTPRequest 库。
  2. 设置GSTwitPicEngine为使用TouchJSON而不是YAJL.
  3. 从 oauth-consumer github 项目中添加了 NSString+URLEncoding 类别,因为OARequestHeader缺少它。
  4. 修改了OARequestHeader中所有出现的 NSDictionary* foo = [toke parameters]的行:
    • 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 错误地假定反序列化:错误:方法接受 NSString 而不是 NSData。
于 2011-04-29T13:45:56.153 回答
0

从 twitter 引擎获取后,您可以为 twitpic 设置访问令牌和访问密钥,即

SA_OAuthTwitterEngine.m

  • (void) setAccessToken: (OAServiceTicket *) ticket withData: (NSData *) data

在“SA_OAuthTwitterEngine.m”中创建“GSTwitPicEngine.m”类的对象并将访问令牌和访问密钥传递给“GSTwitPicEngine.m”并在“SA_OAuthTwitterEngine.m”中设置“GSTwitPicEngine.m”的委托方法

还有一个变化……

生成 OAuth 标头时必须交叉检查 URLEncoding,即

[requestHeader 生成RequestHeaders]

这将根据 Twitter 库中的“OAuthConsumer”类

于 2012-10-12T04:50:00.540 回答