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.
问题似乎是 userId
和 timestamp
的类型。将它们从 Int
更改为 NSNumber
解决了问题。
是的,我遇到了同样的问题。在努力了 3 days.i 后发现 swift 4 中不支持 AWSDynamoDBObjectModel。请尝试 swift 3 版本。你会成功的。
我正在尝试使用 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.
问题似乎是 userId
和 timestamp
的类型。将它们从 Int
更改为 NSNumber
解决了问题。
是的,我遇到了同样的问题。在努力了 3 days.i 后发现 swift 4 中不支持 AWSDynamoDBObjectModel。请尝试 swift 3 版本。你会成功的。