Я пробовал много разных способов сохранить элемент в Dynamo DB, но все равно получаю ту же ошибку:
UserInfo = {__type=com.amazon.coral.validate#ValidationException, message=Supplied AttributeValue is empty, must contain exactly one of the supported datatypes}
Вот мой файл модели:
// ImageTable.swift
// MySampleApp
//
//
// Copyright 2018 Amazon.com, Inc. or its affiliates (Amazon). All Rights Reserved.
//
// Code generated by AWS Mobile Hub. Amazon gives unlimited permission to
// copy, distribute and modify it.
//
// Source code generated from template: aws-my-sample-app-ios-swift v0.21
//
import Foundation
import UIKit
import AWSDynamoDB
class ImageTable: AWSDynamoDBObjectModel, AWSDynamoDBModeling {
var _imageID: String?
var _kValue: NSNumber?
var _latitude: NSNumber?
var _longitude: NSNumber?
class func dynamoDBTableName() -> String {
return "sendit-mobilehub-1219842108-ImageTable"
}
class func hashKeyAttribute() -> String {
return "_imageID"
}
class func rangeKeyAttribute() -> String {
return "_kValue"
}
override class func jsonKeyPathsByPropertyKey() -> [AnyHashable: Any] {
return [
"_imageID" : "imageID",
"_kValue" : "k-value",
"_latitude" : "latitude",
"_longitude" : "longitude",
]
}
}
Вот код, который я использую, чтобы попытаться сохранить данные:
let dynamoDbObjectMapper = AWSDynamoDBObjectMapper.default()
let imageTable: ImageTable = ImageTable()
imageTable._imageID = AWSIdentityManager.default().identityId
print(imageTable._imageID)
imageTable._kValue = NSNumber(value: 1)
imageTable._latitude = NSNumber(value: 1)
imageTable._longitude = NSNumber(value: 1)
//Save a new item
dynamoDbObjectMapper.save(imageTable, completionHandler: {
(error: Error?) -> Void in
if let error = error {
NSLog("Amazon DynamoDB Save Error: \(error)")
return
}
NSLog("An item was saved.")
})
Шаги, которые я уже пробовал:
Спасибо!





Ограничения DynamoDB для атрибутов: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Limits.html#limits-attributes. Значение атрибута не может быть пустой строкой или пустым набором (набор строк, набор чисел или двоичный набор). Однако пустые списки и карты разрешены.
Можете ли вы проверить, все ли четыре поля в таблице имеют действительные непустые значения? Подозреваю, что AWSIdentityManager.default().identityId пуст. Вам необходимо настроить аутентификацию с помощью AWS Auth SDK в своем приложении для iOS, чтобы этот идентификатор был действительной и непустой строкой. Ссылка: https://docs.aws.amazon.com/aws-mobile/latest/developerguide/add-aws-mobile-user-sign-in.html
Можете ли вы добавить атрибут @objc к каждому свойству в классе модели сгенерированного источника? Это позволит коду Objective-C увидеть эти свойства.
Я сделал это, а также поставил атрибут @objcMembers перед объявлением класса только для того, чтобы увидеть ту же ошибку.
Я распечатал AWSIdentityManager.default (). IdentityId в журнале, и он отображается и не является пустым.