0

J'essaie d'utiliser DynamoDB en utilisant le SDK iOS Swift. J'utilise Cognito avec Facebook en tant que fournisseur d'identité externe. Cognito fonctionne bien - j'ai testé la synchronisation des utilisateurs et cela fonctionne bien, donc je crois que j'ai configuré l'authentification. Voilà comment je suis mise en place du SDK (je les valeurs réelles de ma piscine d'identité dans mon code):Swift DynamoDB Mapper Envoi de valeurs vides

let credentialsProvider = AWSCognitoCredentialsProvider(regionType:.USEast1, 
                  identityPoolId:"<my-identity-pool-id>", identityProviderManager: FacebookProvider()) 

    let configuration = AWSServiceConfiguration(region:.USEast1, credentialsProvider:credentialsProvider) 
    AWSServiceManager.default().defaultServiceConfiguration = configuration 

Et voici ma DynamoDB classe mappée:

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

J'ai vérifié que mon code a les noms de table et d'attribut corrects et que les valeurs de clé de hachage et de clé de plage sur la table sont identiques, y compris la sensibilité à la casse, avec les champs de ma classe SavedItem.

Voilà comment j'instancier le cartographe:

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 
}) 

sur de plus ou moins droite que le code de l'exemple de documentation AWS. Mais, voici ce que je reviens dans la console lorsque ce code est exécuté:

je me suis cogné la console vous connecter jusqu'à débogage, et il semble que le cartographe n'envoie tous les attributs de l'objet SavedItem. Voici ce qui est dans la console pour le corps de la requête save:

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

Toute idée pourquoi les valeurs ne sont pas s'inclus dans le corps de la demande sauver?

utilisant SSFE-sdk-ios v2.6.1 dans Swift 4 sur iOS 11.

Répondre

0

Le problème semble être le type de userId et timestamp. Le changement de Int à NSNumber a résolu le problème.

-1

Oui j'ai fait face à ce même problème. et après avoir lutté pendant 3 jours. J'ai trouvé que AWSDynamoDBObjectModel ne supporte pas dans swift 4. s'il vous plaît essayer dans la version 3 rapide. Vous aurez du succès.

+0

Cela n'a pas été mon expérience; Je l'utilise avec Swift 4. Le problème semblait être le type de propriétés sur le modèle. – rpmartz

+0

Oui, je le sais. Mais il suffit de changer la version rapide pour Swift 3.2 de 4.0 rapide. et vérifiez si cela fonctionne ou non. – user3202457