刚开始使用DynamoDB,我正在跟踪他们的Swift示例,并且不断收到相同的错误:'NSInternalInconsistencyException',原因:'_ regionId不是TestApp.RegionLocations的属性。' < / p>
我的带有分区键 regionId 的DynamoDB项目看起来像这样:
{
"locations": [
{
"latitude": 40.1234567,
"longitude": 70.1234567,
"name": "Location 1",
"locationId": "LOCATION1-123"
},
{
"latitude": 41.1234567,
"longitude": 71.12345678,
"name": "Location 2",
"locationId": "Location2-123"
}
],
"regionId": "region1"
}
从AWS下载的DynamoDBObjectModel。完全不动摇的是我:
import Foundation
import UIKit
import AWSDynamoDB
class RegionLocations: AWSDynamoDBObjectModel, AWSDynamoDBModeling {
var _regionId: String?
var _locations: [String: String]?
class func dynamoDBTableName() -> String {
return -nameOfTable-
}
class func hashKeyAttribute() -> String {
return "_regionId"
}
override class func jsonKeyPathsByPropertyKey() -> [AnyHashable: Any] {
return [
"_regionId" : "regionId",
"_locations" : "locations",
]
}
}
获取函数,在我的VC的ViewDidLoad()中调用。基本上是从AWS的示例复制而来的,该示例具有更改的变量名称和 rangeKey:nil :
func fetchLocations(){
let dynamoDbObjectMapper = AWSDynamoDBObjectMapper.default()
let locations: RegionLocations = RegionLocations();
locations._regionId = "region1"
dynamoDbObjectMapper.load(
RegionLocations.self,
hashKey: locations._regionId!,
rangeKey: nil,
completionHandler: {
(objectModel: AWSDynamoDBObjectModel?, error: Error?) -> Void in
if let error = error {
print("Amazon DynamoDB Read Error: \(error)")
return
}
print("An item was read.")
})
}
已在dynamoDbObjectMapper.load()内使用:hashKey:“ region1”尝试了(没有成功),而不是在上面的代码中使用RegionLocations对象。 还重新启动了Xcode并多次清理了项目。 我对自己做错的事情非常困惑,因为我主要关注AWS的教程。
答案 0 :(得分:0)
这很可能是由于类成员的@objc注释缺失所致。请更新表定义,使所有成员都拥有@objc
,如下所示:https://docs.aws.amazon.com/aws-mobile/latest/developerguide/add-aws-mobile-nosql-database.html#add-aws-mobile-nosql-database-crud。在此阐明了原因:https://github.com/aws/aws-sdk-ios/issues/750#issuecomment-337046816
谢谢, 罗汉