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