Swift DynamoDB 映射器发送空值

Swift DynamoDB Mapper Sending Empty Values

我正在尝试使用 iOS Swift SDK 来使用 DynamoDB。我将 Cognito 与 Facebook 一起用作外部身份提供商。 Cognito 工作正常 - 我已经测试了用户同步并且工作正常,所以我相信我已经设置了身份验证。以下是我设置 SDK 的方式(我的代码中有身份池的实际值):

let credentialsProvider = AWSCognitoCredentialsProvider(regionType:.USEast1,
                                                          identityPoolId:"<my-identity-pool-id>", identityProviderManager: FacebookProvider())

    let configuration = AWSServiceConfiguration(region:.USEast1, credentialsProvider:credentialsProvider)
    AWSServiceManager.default().defaultServiceConfiguration = configuration

这是我映射的 DynamoDB class:

import Foundation
import AWSDynamoDB

class SavedItem : AWSDynamoDBObjectModel, AWSDynamoDBModeling {

    var userId : Int?
    var timestamp : Int?

    class func dynamoDBTableName() -> String {
        return "my-table"
    }

    class func hashKeyAttribute() -> String {
         return "userId"
    }

    class func rangeKeyAttribute() -> String {
        return "timestamp"
    }
  }

我已验证我的代码具有正确的 table 和属性名称,并且 table 上的散列键和范围键值与以下字段相同,包括区分大小写我的 SavedItem class.

这是我实例化映射器的方式:

let dynamoDBObjectMapper = AWSDynamoDBObjectMapper.default()

let savedItem = SavedItem()
savedItem?.userId = 1
savedItem?.timestamp = 2

dynamoDBObjectMapper.save(savedItem!).continueWith(block: { (task:AWSTask<AnyObject>!) -> Any? in
    if let error = task.error as? NSError {
        print("The request failed. Error: \(error)")
    } else {
        print("Save callback executing")
    }

    return nil
})

该代码或多或少直接来自 AWS 文档示例。但是,这是执行该代码时我在控制台中返回的内容:

Error Domain=com.amazonaws.AWSCognitoIdentityErrorDomain Code=0 "(null)" UserInfo={__type=com.amazon.coral.validate#ValidationException, message=Supplied AttributeValue is empty, must contain exactly one of the supported datatypes}

我将控制台日志记录设置为调试,看起来映射器没有从 SavedItem 对象发送任何属性。以下是 save 请求正文的控制台内容:

Request body:
{"Key":{"userId":{},"timestamp":{}},"TableName":"my-table","AttributeUpdates":{}}

知道为什么值没有包含在保存请求正文中吗?

使用 aws-sdk-ios v2.6.1 on in Swift 4 on iOS 11.

问题似乎是 userIdtimestamp 的类型。将它们从 Int 更改为 NSNumber 解决了问题。

是的,我遇到了同样的问题。在努力了 3 days.i 后发现 swift 4 中不支持 AWSDynamoDBObjectModel。请尝试 swift 3 版本。你会成功的。