是什么原因导致DynamoDB UpdateItem在Swift中导致Giv致命错误?

时间:2014-11-04 01:53:27

标签: amazon-web-services amazon-dynamodb

我正在使用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(代码= EXC_ARM_BREAKPOINT,子代码= 0xe7ffdefe)

我没有使用.continueWithBlock或.continueWithSuccessBlock cuz既没有帮助捕获错误。

知道为什么吗?致谢

2 个答案:

答案 0 :(得分:0)

您需要获取AWSDynamoDB的实例,如下所示:

let dynamoDB = AWSDynamoDB.defaultDynamoDB()

您使用默认的- init方法而没有任何参数,这会导致AWSDynamoDB实例没有AWSServiceConfiguration

答案 1 :(得分:0)

使用当前的AWS,发现这适用于在Swift中发布updateItem。

    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()