Что заставляет DynamoDB UpdateItem вызывать фатальную ошибку в Swift?

Я использую Swift, чтобы мое приложение обновляло элемент в DynamoDB. Я последовал примеру https://github.com/aws/aws-sdk-ios/blob/master/AWSiOSSDKTests/AWSDynamoDBTests.m#L244, метод "- (void)testUpdateItem". Мои коды следующие:

var dynamoDB = AWSDynamoDB()

var hashValue: AWSDynamoDBAttributeValue = AWSDynamoDBAttributeValue()
hashValue.S = userID
var updatedValue: AWSDynamoDBAttributeValue = AWSDynamoDBAttributeValue()
updatedValue.S = updatedContent

var updateInput: AWSDynamoDBUpdateItemInput = AWSDynamoDBUpdateItemInput()
updateInput.tableName = kAWSDynamoDBMoEndpointARNTableName
updateInput.key = ["UserID": hashValue]
var valueUpdate: AWSDynamoDBAttributeValueUpdate = AWSDynamoDBAttributeValueUpdate()
valueUpdate.value = updatedValue
valueUpdate.action = AWSDynamoDBAttributeAction.Put
updateInput.attributeUpdates = ["Updated": valueUpdate]
updateInput.returnValues = AWSDynamoDBReturnValue.UpdatedNew

dynamoDB.updateItem(updateInput).waitUntilFinished()

Однако, когда я запускаю коды, он всегда возвращает фатальную ошибку: неожиданно обнаружил nil при развертывании необязательного значения. Глядя на ошибку, я могу найти ее из Swift._fatalErrorMessage (Swift.StaticString, Swift.StaticString, Swift.StaticString, Swift.Uint) -> () с потоком 1: EXC_BREAKPOINT (code=EXC_ARM_BREAKPOINT, subcode=0xe7ffde)

Я не использовал.continueWithBlock или.continueWithSuccessBlock, потому что ни один не помогает отловить ошибку.

Есть идеи почему? СПАСИБО

2 ответа

Решение

Вам нужно получить экземпляр AWSDynamoDB следующее:

let dynamoDB = AWSDynamoDB.defaultDynamoDB()

Вы используете по умолчанию - init метод без каких-либо параметров, и это вызывает AWSDynamoDB экземпляр не имеет AWSServiceConfiguration,

С текущим AWS обнаружил, что это хорошо работает для публикации updateItem в Swift.

    dynamoDB.updateItem(updateInput) .continueWithExecutor(AWSExecutor.mainThreadExecutor(), withBlock: { (task:AWSTask!) -> AnyObject! in
        if (task.error == nil) {

            log.debug("task.error == nil")

        }

        return nil

    })

// вместо

dynamoDB.updateItem(updateInput).waitUntilFinished()

Другие вопросы по тегам