0

我想使用iOS Swift SDK使用DynamoDB。我将Facebook上的Cognito用作外部身份提供者。 Cognito工作正常 - 我已经测试了用户同步并且它工作正常,所以我相信我已经设置了身份验证。下面是我如何设置的SDK(我有我的身份池的实际值在我的代码):Swift DynamoDB映射器发送空值

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文档例子了。但是,这里就是我回来的控制台代码执行时:

我碰上控制台登录了调试,它看起来像映射器不是从SavedItem对象发送任何属性。下面是在控制台什么是对save请求体:

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

任何想法,为什么没有得到包括在保存请求主体的价值观?

使用AWS-SDK-IOS V2.6.1在夫特4在iOS 11.

回答

0

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

-1

是的,我面临同样的问题。并且挣扎了3天后。我发现AWSDynamoDBObjectModel不支持swift 4.请在swift 3版本中试用。你会获得成功。

+0

这不是我的经验;我在Swift 4中使用它。这个问题似乎是模型中属性的类型。 – rpmartz

+0

是的,我知道。但是从swift 4.0就只换Swift版本为Swift 3.2。并检查它是否工作。 – user3202457