尝试从DynamoDB(Swift)读取时出现DynamoDBObjectModel错误

时间:2018-07-04 16:10:46

标签: ios swift amazon-web-services nosql amazon-dynamodb

刚开始使用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的教程。

1 个答案:

答案 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

谢谢, 罗汉