2010-07-26 76 views
1

过去几天我一直试图让Twitter的OAuth工作在我的iPhone应用程序上,而且我不能为我的生活弄清楚为什么我得到这个错误。我已经改变了一段时间以来的方式,但仍然一无所获。所以我转而希望弄清楚。“无法识别的选择器”错误。无法弄清楚

本教程是linked here。下载应用程序并运行它非常有效。它不适合我。

这是我得到的错误 -

2010-07-25 20:04:52.224 AppTest[4620:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[OAToken setVerifier:]: unrecognized selector sent to instance 0x6c2acc0' 

谁能告诉我什么,我做错了什么?我使用几乎相同的代码。

编辑:下面的代码,我使用setVerifier:

- (IBAction)finishSetup:(id)sender { 

     NSString *thePin = [[NSString alloc] initWithString:pinText.text]; 
     NSLog(@"%@", thePin); 
     if([thePin length] == 7 && [[NSScanner scannerWithString:thePin] scanInt:NULL]) { 

      loadingView.hidden = NO; 

      [pinText resignFirstResponder]; 

      OAConsumer *consumer = [[OAConsumer alloc] initWithKey:consumer_key secret:consumer_secret]; 
      OADataFetcher *fetcher = [[OADataFetcher alloc] init]; 
      NSURL *url = [NSURL URLWithString:@"https://api.twitter.com/oauth/access_token"]; 

      [accessToken setVerifier:pinText.text]; 

      NSLog(@"Using PIN %@", accessToken.verifier); 
      OAMutableURLRequest *request = [[OAMutableURLRequest alloc] initWithURL:url consumer:consumer token:accessToken realm:nil signatureProvider:nil]; 
      [request setHTTPMethod:@"POST"]; 

      NSLog(@"Getting access token..."); 

      [fetcher fetchDataWithRequest:request delegate:self didFinishSelector:@selector(accessTokenTicket:didFinishWithData:) didFailSelector:@selector(accessTokenTicket:didFailWithError:)]; 

     } else { 

      loadingView.hidden = YES; 
      error_alert = [[UIAlertView alloc] initWithTitle:@"TestApp" message:@"The PIN you have entered is invalid. Please try again." delegate:self cancelButtonTitle:@"Cancel Login" otherButtonTitles:@"Try again", nil]; 
      [error_alert show]; 
      [error_alert release]; 

     } 

     [thePin release]; 

    } 
+0

“几乎使用相同的代码”与“使用相同的代码”不一样。如果不同,请将其发布在您的问题中。 – 2010-07-26 00:23:19

+0

这是相同的代码,我的道歉。唯一的区别是该教程不适用于iPhone,而是使用Objective-C和Cocoa。 – 2010-07-26 00:31:51

+0

您应该在您使用' - [OAToken setVerifier:]' – kubi 2010-07-26 00:35:24

回答

0

如果这样做,新的XCode 4是惊人的。我在链接的教程中下载了ZIP文件,看起来好像OAMutableURLRequest.m在整个文件中都有错误,认为NSString响应URLEncodedString。

尝试更新URLEncodedString到

stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding 

让我知道你的作品!

+0

默认情况下,所有XCode4都会打开静态分析。您可以通过执行“构建和分析”来获取旧XCode中的相同信息 – 2010-07-26 01:48:10

0

尝试

[accessToken setVerifier:thePin]; 
0

我认为BarrettJ有它。 setVerifier参数需要一个NSString。由于您提供了其他内容,因此它会查找与签名匹配的不同setVerifier,并且找不到它。这将导致“无法识别的选择器”错误。

1

的accessToken setVerifier:期待一个NSString *

thePin和pinText.text都的NSString *

真的需要出示你实例中的accessToken变量。

1

我是从这里链接的帖子的作者。

您收到此错误的原因是因为您使用的OAuthConsumer版本错误。有几个版本可用,其中大多数版本都没有OAToken中的“验证器”字段,并且会返回如果您尝试使用它的错误。我的帖子中的示例项目包含正确的OAuthVerifier版本,这就是它工作的原因。

我使用仅包含OAuthConsumer的ZIP文件更新了我的帖子。你可以在你的项目中使用它,它会工作。当然,您也可以只复制示例项目中的OAuthConsumer文件并在您的文件中使用,它也可以工作。

+0

我相信另一种选择是进行如下调用:[请求setOAuthParameterName:@“oauth_verifier”withValue:oauthVerifierString] – 2012-02-10 11:18:20

0

在建添加-all_load标志设置

https://developer.apple.com/library/mac/#qa/qa2006/qa1490.html

-all_load强制链接从每一个存档看到,即使是那些没有Objective-C代码加载所有的目标文件。 -force_load可在Xcode 3.2及以后。它允许更精细的谷物控制归档加载。每个-force_load选项后面都必须有一个到存档的路径,并且该存档中的每个目标文件都将被加载。