Ошибка DynamoDBObjectModel при попытке чтения из DynamoDB (Swift) - PullRequest
0 голосов
/ 04 июля 2018

Я только начинаю работать с DynamoDB, и я следую их примерам Swift, и я продолжаю получать ту же ошибку: 'NSInternalInconsistencyException', причина: '_regionId не является свойством TestApp.RegionLocations.'

Мой элемент DynamoDB с ключом раздела regionId выглядит следующим образом:

{
  "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"
}

DynamoDBObjectModel, загруженный с AWS. Полностью нетронутым быть мной:

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

Функция извлечения, которая вызывается в ViewDidLoad () моего VC. В основном скопировано из примера 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.")
    })
}

Попробовал (без успеха) с: hashKey: "region1" внутри DynamoDbObjectMapper.load () вместо использования объекта RegionLocations в приведенном выше коде. Также перезапустил Xcode и очистил проект несколько раз. Я очень озадачен тем, что я делаю неправильно, так как я в основном следую учебному пособию AWS.

1 Ответ

0 голосов
/ 06 июля 2018

Вероятно, это происходит из-за отсутствия аннотаций @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

Спасибо, Rohan

...