我正在尝试使用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 response = [[NSString alloc] initWithData:data 编码: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 :(得分: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];
}
适合我。
答案 1 :(得分:0)
请票是否成功,就像这样...
- (void)fetchingVideoTicket:(OAServiceTicket *)ticket didFinishWithData:(NSData *)data{
if(ticket.didSucceed)
{
your code...
}
在您的情况下似乎请求成功但是没有生成响应,表明您没有包含该请求的所有必需参数,当我尝试连接Vimeo时我也遇到了同样的问题但是在我添加之后请求的回调参数,连接成功并生成响应。检查是否添加了所有参数。