无法使用 MobileHub 从 DynamoDB 检索数据
Can't retrieve data from DynamoDB using MobileHub
我可以成功地从 DynamoDB 检索数据 table。
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 对 table 模型 myModel
的响应上。
为了获得 myModel
我只是从 Mobile Hub 中获取示例应用程序并将现有字段替换为我使用的字段。
问题已解决:模型属性包含大写字母。删除它们会使过程正常进行。
以下是非工作代码。在 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",
]
}
}
奇怪,不是吗?
我可以成功地从 DynamoDB 检索数据 table。
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 对 table 模型 myModel
的响应上。
为了获得 myModel
我只是从 Mobile Hub 中获取示例应用程序并将现有字段替换为我使用的字段。
问题已解决:模型属性包含大写字母。删除它们会使过程正常进行。
以下是非工作代码。在 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",
]
}
}
奇怪,不是吗?