无法使用MobileHub从DynamoDB检索数据

时间:2016-11-29 09:38:20

标签: swift amazon-dynamodb aws-mobilehub

我可以成功从DynamoDB表中检索数据。

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


    }

完成处理程序抱怨响应为零,但是日志表示存在响应内容是预期的响应。

所以看起来问题出现在将JSON响应映射到表'模型myModel

要获得myModel,我只需从Mobile Hub获取示例应用,并使用我使用的字段替换现有字段。

1 个答案:

答案 0 :(得分:0)

问题解决了:模型属性包含大写字母。删除它们会使该过程有效。

此后呈现非工作代码。在项目中,DynamoDB上的字段名称必须以大写字母开头。然后,我按照此规则创建了属性,并添加了前缀下划线。

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

    ]
}

}

这是工作代码:

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

    ]
}

}

奇怪,不是吗?