我正在使用Amazon SimpleDB进行选择查询,并且我正在尝试使用AWS AmazonServiceRequestDelegate
,这里是委托方法(我已在.h BTW中符合):
- (void)request:(AmazonServiceRequest *)request didFailWithError:(NSError *)error {
NSLog(@"%@", error.localizedDescription);
}
- (void)request:(AmazonServiceRequest *)request didReceiveData:(NSData *)data {
NSLog(@"recieving data");
}
- (void)request:(AmazonServiceRequest *)request didReceiveResponse:(NSURLResponse *)response {
NSLog(@"response recieved");
}
- (void)request:(AmazonServiceRequest *)request didCompleteWithResponse:(AmazonServiceResponse *)response {
NSLog(@"Completed");
}
它们都被调用,除了didCompleteWithResponse:
,这个方法应该在整个操作用响应完成时被调用。didFailWithError:
也没有被调用,但我不认为我的操作有任何失败的理由。
SimpleDBSelectRequest *sReq = [[SimpleDBSelectRequest alloc] initWithSelectExpression:SELECT_STRING andConsistentRead: YES];
sReq.delegate = self;
sReq.requestTag = FIND_FRIENDS_SDB;
[sdbClient select: sReq];
其中SELECT_STRING
和FIND_FRIENDS_SDB
是预定义的,并且对上下文字符串有效。
我的问题是什么?谢谢!
更新:完成委派工作。得到一个与我的SimpleDB SELECT查询相关的错误,显然我的SELECT表达式的语法无效。我得到了两个错误,因为我正在执行两个查询,下面是每个查询的SELECT表达式:
select * from trvlog -app where Type = 'account' AND itemName() = 'me%40rohankapur.com-account'
查看'Type'属性和'itemName()'并检查它们是否等于域中的某些内容。
select * from trvlog -app where Email in(' katie -bell%40mac.com','www.creative-consulting-inc.com','d-higgins%40mac.com','John-Appleseed%40mac.com','anna-haro%40mac.com','hank-zakroff%40mac.com')
检查这些字符串是否存在于域的Email属性中。
注意:
修复了它,显然当使用SELECT表达式时,域名不能有破折号。或者破折号似乎打破了请求
当使用AmazonServiceRequestDelegate
时,这篇博客文章可能会有所帮助。基本上,您需要:
- 避免在后台线程中使用AmazonServiceRequestDelegate。
- 保留对客户端的强引用
- 保留对委托的强引用
另外,您应该确保调用了[AmazonErrorHandler shouldNotThrowExceptions]
,因为您没有实现request:didFailWithServiceException:
。