2013-08-26 11 views
1

我试图使用OAConsumer API获取数据。我尝试了下面的代码,它给我一个错误。OAConsumer API在接收数据时发生错误

-(void)performQuery 
{ 
OAConsumer *consumer = [[OAConsumer alloc] initWithKey:OAUTH_KEY 
                secret:OAUTH_SECRET]; 

NSURL *url = [NSURL URLWithString:@"https://api.semantics3.com/v1/products"]; 

OAMutableURLRequest *request = [[OAMutableURLRequest alloc] initWithURL:url 
                   consumer:consumer 
                    token:nil 
                    realm:nil 
                 signatureProvider:nil]; // use the default method, HMAC-SHA1 

    [request setHTTPMethod:@"GET"]; 
    [consumer release]; 


    OARequestParameter * qParam = [[OARequestParameter alloc] initWithName:@"q" value:@"{\"cat_id\":13658,\"model\":\"Satellite\"}"]; 


NSArray *params = [NSArray arrayWithObjects:qParam, nil]; 
[qParam release]; 

[request setParameters:params]; 
OADataFetcher *fetcher = [[OADataFetcher alloc] init]; 

[fetcher fetchDataWithRequest:request 
        delegate:self 
      didFinishSelector:@selector(requestDidFinishWithData:) 
       didFailSelector:@selector(requestDidFailWithError:)]; 

    [request release]; 

}

误差如下:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[OAServiceTicket bytes]: unrecognized selector sent to instance 0x1ed65bf0' 

在这条线发生的错误: **的NSString 响应= [[NSString的页头] initWithData:数据 编码:NSUTF8StringEncoding];

- (void)requestDidFinishWithData:(NSData *)data { 

    NSString *response= [[NSString alloc] initWithData:data 
                encoding:NSUTF8StringEncoding]; 

    //here do what you want with the response, I use SBJson to parse it. 

    NSLog(@"Request success!%@", response); 
    [responseBody release]; 


} 


    - (void)requestDidFailWithError:(NSError *)error { 

    NSLog(@"Request did fail with error: %@", [error localizedDescription]); 

    } 

任何想法,我在这里做什么?

+0

我有完全相同的问题。很显然,OAServiceTicket对象不再存在。我还没有能够找到该项目的ARC iOS版本,也许所有非ARC的东西都会导致一些问题。你修好了吗? – cspam

回答

1

当您尝试将其读取为实际上是OAServiceTicket对象的NSData时。

的OAServiceTicket对象有以下几点:

request = [aRequest retain]; 
response = [aResponse retain]; 
data = [aData retain]; 
didSucceed = success; 

所以你委托具有如下:

- (void)requestDidFinishWithData:(OAServiceTicket *)ticket { 

    NSString *response= [[NSString alloc] initWithData:ticket.data 
               encoding:NSUTF8StringEncoding]; 

    //here do what you want with the response, I use SBJson to parse it. 

    NSLog(@"Request success!%@", response); 
    [response release]; 

} 

为我工作。

0

请门票是否成功,像这样...

- (void)fetchingVideoTicket:(OAServiceTicket *)ticket didFinishWithData:(NSData *)data{ 
if(ticket.didSucceed) 
{ 
    your code... 
} 

它似乎在你的情况下请求是成功的,但没有任何反应生成其中规定,你有没有包括所有必需的参数该请求,我也遇到了同样的问题,当我试图连接Vimeo,但在我添加回调参数的请求后,连接成功,并生成响应。检查是否添加了所有参数。