使用 Objective-C 的 DynamoDB 查询抛出无法识别的选择器异常
DynamoDB Query using Objective-C throwing unrecognized selector exception
我正在尝试重新发布一个用 Objective-C 编写的旧 iPhone 应用程序。决定使用 DynamoDB 但一直在努力使用 AWSDynamoDBQueryInput 进行查询。
问题:需要从全局二级索引中按排序键的降序检索前 N 条记录。使用哈希键 (gameTitle) 和排序键 (totalScore) 定义的全局二级索引。我一直在关注 AWS 文档,并且可以让它在 CLI 中运行,但无法通过 Xcode/Objective-C 执行相同的操作。我收到“无法识别的选择器发送到 class”异常。
AWSDynamoDBQueryInput *AWSquery = [AWSDynamoDBQueryInput new];
AWSquery.tableName = AWSTableName;
AWSquery.indexName = AWSIndex;
AWSquery.scanIndexForward = false;
AWSquery.limit = @6;
AWSquery.keyConditionExpression = @"gameTitle = :gameTitle";
AWSquery.expressionAttributeValues = @{@":gameTitle":@"sampleGame"};
@try {
[[dynamoDB query:AWSquery] continueWithBlock:^id(AWSTask *task){
return @"task.result";
}];
}
@catch (NSException *exception) {
NSLog(@"%@ ", exception.name);
NSLog(@"Reason: %@ ", exception.reason);
}
我怀疑问题出在“keyConditionExpression”上,但非常感谢任何指导。谢谢!
终于成功了!在 expressionAttributeValues
中使用它之前,我必须使用 AWSDynamoDBAttributeValue
来定义属性值。下面的工作代码。
AWSDynamoDBQueryInput *AWSquery = [AWSDynamoDBQueryInput new];
AWSquery.tableName = AWSTableName;
AWSquery.indexName = AWSIndex;
AWSquery.scanIndexForward = @NO;
AWSquery.limit = @6;
AWSDynamoDBAttributeValue *attValue = [AWSDynamoDBAttributeValue new];
attValue.S = @"sampleGame";
AWSquery.keyConditionExpression = @"gameTitle=:gameTitle";
AWSquery.expressionAttributeValues = @{@":gameTitle":attValue};
@try {
[[dynamoDB query:AWSquery] continueWithBlock:^id(AWSTask *task){
return @"task.result";
}];
}
@catch (NSException *exception) {
NSLog(@"%@ ", exception.name);
NSLog(@"Reason: %@ ", exception.reason);
}
我正在尝试重新发布一个用 Objective-C 编写的旧 iPhone 应用程序。决定使用 DynamoDB 但一直在努力使用 AWSDynamoDBQueryInput 进行查询。
问题:需要从全局二级索引中按排序键的降序检索前 N 条记录。使用哈希键 (gameTitle) 和排序键 (totalScore) 定义的全局二级索引。我一直在关注 AWS 文档,并且可以让它在 CLI 中运行,但无法通过 Xcode/Objective-C 执行相同的操作。我收到“无法识别的选择器发送到 class”异常。
AWSDynamoDBQueryInput *AWSquery = [AWSDynamoDBQueryInput new];
AWSquery.tableName = AWSTableName;
AWSquery.indexName = AWSIndex;
AWSquery.scanIndexForward = false;
AWSquery.limit = @6;
AWSquery.keyConditionExpression = @"gameTitle = :gameTitle";
AWSquery.expressionAttributeValues = @{@":gameTitle":@"sampleGame"};
@try {
[[dynamoDB query:AWSquery] continueWithBlock:^id(AWSTask *task){
return @"task.result";
}];
}
@catch (NSException *exception) {
NSLog(@"%@ ", exception.name);
NSLog(@"Reason: %@ ", exception.reason);
}
我怀疑问题出在“keyConditionExpression”上,但非常感谢任何指导。谢谢!
终于成功了!在 expressionAttributeValues
中使用它之前,我必须使用 AWSDynamoDBAttributeValue
来定义属性值。下面的工作代码。
AWSDynamoDBQueryInput *AWSquery = [AWSDynamoDBQueryInput new];
AWSquery.tableName = AWSTableName;
AWSquery.indexName = AWSIndex;
AWSquery.scanIndexForward = @NO;
AWSquery.limit = @6;
AWSDynamoDBAttributeValue *attValue = [AWSDynamoDBAttributeValue new];
attValue.S = @"sampleGame";
AWSquery.keyConditionExpression = @"gameTitle=:gameTitle";
AWSquery.expressionAttributeValues = @{@":gameTitle":attValue};
@try {
[[dynamoDB query:AWSquery] continueWithBlock:^id(AWSTask *task){
return @"task.result";
}];
}
@catch (NSException *exception) {
NSLog(@"%@ ", exception.name);
NSLog(@"Reason: %@ ", exception.reason);
}