2016-11-29 1 views
0

Je parviens à extraire des données d'une table DynamoDB.Impossible de récupérer des données à partir de DynamoDB à l'aide de MobileHub

func myRequest(completionHandler: (response: AWSDynamoDBObjectModel?, error: NSError?) -> Void) { 

let objectMapper = AWSDynamoDBObjectMapper.defaultDynamoDBObjectMapper() 

objectMapper.load(myModel.self, 
          hashKey: AWSIdentityManager.defaultIdentityManager().identityId!, 
          rangeKey: nil, 
          completionHandler: {(response: AWSDynamoDBObjectModel?, error: NSError?) -> Void in 
      dispatch_async(dispatch_get_main_queue(), { 
       completionHandler(response: response, error: error) 
      }) 
     }) 


    } 

La réponse du gestionnaire d'achèvement est nulle mais le journal indique qu'il existe une réponse dont le contenu est attendu.

Il semble donc que le problème se produit lors du mappage de la réponse JSON à la table 'modèle myModel.

Pour obtenir myModel J'ai simplement pris l'exemple d'application de Mobile Hub et remplacer les champs existants par celui que j'utilise.

Répondre

0

Problème résolu: les propriétés du modèle contenaient des majuscules. En les supprimant, le processus fonctionne.

Ci-après est présenté le code ne fonctionnant pas. Dans le nom du champ de projet sur DynamoDB doit commencer par une lettre majuscule. J'ai ensuite créé des propriétés en suivant cette règle, avec un underscore de préfixage ajouté.

class MyModel: AWSDynamoDBObjectModel, AWSDynamoDBModeling { 

var _UserId: String? 
var _ArticleId: String? 


class func dynamoDBTableName() -> String { 

    return "myTable" 
} 

class func hashKeyAttribute() -> String { 

    return "_UserId" 
} 

class func rangeKeyAttribute() -> String { 

    return "_ArticleId" 
} 

override class func JSONKeyPathsByPropertyKey() -> [NSObject : AnyObject] { 
    return [ 
      "_UserId" : "UserId", 
      "_ArticleId" : "ArticleId", 

    ] 
} 

}

Un Voici le code de travail:

class MyModel: AWSDynamoDBObjectModel, AWSDynamoDBModeling { 

var _userId: String? 
var _articleId: String? 


class func dynamoDBTableName() -> String { 

    return "myTable" 
} 

class func hashKeyAttribute() -> String { 

    return "_userId" 
} 

class func rangeKeyAttribute() -> String { 

    return "_articleId" 
} 

override class func JSONKeyPathsByPropertyKey() -> [NSObject : AnyObject] { 
    return [ 
      "_userId" : "UserId", 
      "_articleId" : "ArticleId", 

    ] 
} 

}

étrange, non?