Swift DynamoDB Mapper отправляет пустые значения

Я пытаюсь использовать DynamoDB с помощью iOS Swift SDK. Я использую 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:

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":{}}

Есть идеи, почему значения не включаются в тело запроса на сохранение?

Использование aws-sdk-ios v2.6.1 в Swift 4 на iOS 11.


person rpmartz    schedule 29.09.2017    source источник


Ответы (2)


Проблема вроде типа userId и timestamp. Изменение их с Int на NSNumber устранило проблему.

person rpmartz    schedule 30.09.2017

Да, я столкнулся с той же проблемой. и после борьбы в течение 3 дней. я обнаружил, что AWSDynamoDBObjectModel не поддерживает в быстрой версии 4. попробуйте в быстрой версии 3. Вы добьетесь успеха.

person user3202457    schedule 08.01.2018
comment
Это не было моим опытом; Я использую его со Swift 4. Проблема, похоже, заключалась в типе свойств модели. - person rpmartz; 08.01.2018
comment
Да, я знаю это. Но просто поменяйте версию swift на swift 3.2 с swift 4.0. и проверьте, работает он или нет. - person user3202457; 08.01.2018
comment
Нет необходимости возвращаться к быстрому 3. Это проблема типа, которая решена в ответе @rpmartz. - person froggomad; 12.04.2018