适用于 Swift 3.0 的 AWSDynamoDB 2.4.9 - [AWSDynamoDBQueryExpression setKeyConditionExpression:]:发送到实例的无法

Posted

技术标签:

【中文标题】适用于 Swift 3.0 的 AWSDynamoDB 2.4.9 - [AWSDynamoDBQueryExpression setKeyConditionExpression:]:发送到实例的无法识别的选择器【英文标题】:AWSDynamoDB 2.4.9 for Swift 3.0 - [AWSDynamoDBQueryExpression setKeyConditionExpression:]: unrecognized selector sent to instance 【发布时间】:2016-09-30 06:11:03 【问题描述】:

刚刚在 OS X El Capitan 版本 10.11.5 上升级到 Swift 3.0 (swiftlang-800.0.46.2 clang-800.0.38) 和 XCode 版本 8.0 (8A218a)。 AWSDynamoDB 的 Pod 安装/更新到 2.4.9。

let expression = AWSDynamoDBQueryExpression()
expression.keyConditionExpression = "bn = Test"

导致我的应用程序因我尝试放入字符串中的所有内容而崩溃:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[AWSDynamoDBQueryExpression setKeyConditionExpression:]: unrecognized selector sent to instance 0x6080000747c0'

我之前在查询中使用了 expression.hashKeyValues,它运行良好,但在最新版本中已将其删除。我一直在使用它来模拟我的更改: https://github.com/awslabs/aws-sdk-ios-samples/blob/master/DynamoDBObjectMapper-Sample/Swift/DynamoDBSampleSwift/DDBSearchViewController.swift

寻找有关我是否错误地使用 keyConditionExpression、应该使用其他东西、需要更新到其他东西或者此错误消息是否是红鲱鱼等的指导。

谢谢!

【问题讨论】:

【参考方案1】:

您的代码应如下所示:

    let objectMapper = AWSDynamoDBObjectMapper.defaultDynamoDBObjectMapper()
    let queryExpression = AWSDynamoDBQueryExpression()
    queryExpression.keyConditionExpression = "#hashAttribute = :hashAttributeWithComplexName"
    queryExpression.expressionAttributeNames = ["#hashAttribute": "hashAttribute"]
    queryExpression.expressionAttributeValues = [":hashAttribute": value]

这是一些标题文档,它提供了关于哪个方法执行哪个操作的上下文:

/**
 The condition that specifies the key value(s) for items to be retrieved by the Query action. For more information, see [AWSDynamoDBQueryInput keyConditionExpression]

 For example, you may set keyConditionExpression to `hashAttributeName = :hashVal AND rangeAttributeName = :rangeVal` where `hashAttributeName` and `rangeAttributeName` is the attribute name of the hash key and range key respectively. Then you can set `expressionAttributeValues` to `@@":hashVal" : @"myHashValue", @":rangeVal" : @100`.

 @see [AWSDynamoDBQueryInput keyConditionExpression]
 @see expressionAttributeNames
 @see expressionAttributeValues
 */
public var keyConditionExpression: String?

/**
 One or more substitution tokens for attribute names in an expression.

 @see [AWSDynamoDBQueryInput expressionAttributeNames]
 */
public var expressionAttributeNames: [String : String]?

/**
 One or more values that can be substituted in an expression.

 @see [AWSDynamoDBQueryInput expressionAttributeValues]
 */
public var expressionAttributeValues: [String : AnyObject]?

【讨论】:

以上是关于适用于 Swift 3.0 的 AWSDynamoDB 2.4.9 - [AWSDynamoDBQueryExpression setKeyConditionExpression:]:发送到实例的无法的主要内容,如果未能解决你的问题,请参考以下文章

SwiftChart 库不适用于 Swift 3.0

声明枚举路由器 Alamofire swift 3.0

如何在 swift 3.0 中制作 5*8 集合视图 [关闭]

json 适用于Authentiq Connect API的OpenAPI 3.0

适用于 Visual Studio 的 OpenMP 3.0

使应用程序适用于 ios 3.0