AWS DynamoDB for iOS字符串属性返回nil

时间:2017-10-04 20:55:24

标签: ios swift amazon-web-services amazon-dynamodb

我最近将我的项目更新为Swift 4,现在当我扫描我的Amazon数据库时,属性返回nil。这是我的扫描码:

let scanExpression = AWSDynamoDBScanExpression()
    scanExpression.filterExpression = "contains(Name, :name)"
    scanExpression.expressionAttributeValues = [":name": (user?.username)!]

    dynamoDBObjectMapper.scan(DBPerson.self, expression: scanExpression).continueWith(block: { (task:AWSTask!) -> Any? in
        if let error = task.error as NSError? {
            print("The request failed. Error: \(error)")
        } else if let paginatedOutput = task.result {
            DispatchQueue.main.async(execute: {
                self.people.removeAll()
                for person in paginatedOutput.items as! [DBPerson] {
                    self.people += [person] //breakpoint here
                }
                self.tableView.reloadData()
            })
        }
        return nil
    })

我的DBPerson课程:

import AWSDynamoDB

class DBPerson : AWSDynamoDBObjectModel, AWSDynamoDBModeling  {
    var Name: String?
    var Occupation: String?

    class func dynamoDBTableName() -> String {
        return "People"
    }

    class func hashKeyAttribute() -> String {
        return "Name"
    }
}

我在扫描循环中设置一个断点来查看我的属性,它们总是以零结束。我的项目在更新Swift 4之前正在工作,在我的表中显示了属性。我已经尝试将Name和Occupation(在DBPerson类中)的类型更改为NSString,NSArray等内容,甚至是像Substring和CFString一样在黑暗中拍摄。

我的DynamoDB表中包含值,并返回正确的项数,但属性值始终为nil。这是我表中的示例项目:

{
"Name": "Bill",
"Occupation": "Firefighter"
}

除了转换回Swift 3之外,还有其他解决方案吗?感谢。

1 个答案:

答案 0 :(得分:2)

这是由于推理@objc的Swift 4行为更改发生了变化。您需要使用@objc标记ObjectiveC可用的属性,或使用@objcMembers标记ObjectiveC可用的所有类属性

有关示例,请参阅: https://github.com/aws/aws-sdk-ios/issues/750#issuecomment-337046816