我正在尝试使用DynamoDB使用iOS Swift。我用Facebook作为外部身份提供者。科尼托很好--我已经测试过用户同步,它运行良好,所以我相信我已经设置了身份验证。下面是如何设置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映射类:
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"
}
}我已经验证了我的代码有正确的表名和属性名,表上的散列键和范围键值与我的SavedItem类中的字段相同,包括区分大小写。
下面是我如何实例化映射器:
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":{}}知道为什么这些值没有包含在保存请求体中吗?
在iOS 11上使用AWS-SDK-IOSv2.6.1in Swift 4。
发布于 2018-01-08 10:29:45
是的,我也面临着同样的问题。而在挣扎了3天之后,我发现AWSDynamoDBObjectModel不支持在斯威夫特4。请尝试在迅捷3版本。你会成功的。
https://stackoverflow.com/questions/46493204
复制相似问题