使用 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);
    }