Что заставляет 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()