私は最近Swift 4にプロジェクトを更新しましたが、Amazonデータベースをスキャンすると、属性はnilを返します。ここに私のスキャンコードは次のとおりです。iOS用のAWS DynamoDB文字列属性が返されません
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のアップデート前に働いていて、テーブルの属性を示していました。 NSString、NSArray、さらにはサブストリングやCFStringのような暗闇の中でさえも、名前と職業のタイプ(DBPersonクラス内)を変更しようとしました。
DynamoDBテーブルに値が含まれていて、正しいアイテム数が返されますが、属性値は常にnilです。ここに私のテーブルからのサンプル項目である:
{
"Name": "Bill",
"Occupation": "Firefighter"
}
はスウィフト3に戻って変換する以外の解決策はありますか?ありがとう。
文字列は、モデルタイプのために働く必要があります:あなたは@objc使用してObjectiveCに利用可能なプロパティをマークするか、参照してください。例えば
@objcMembers
を使用してObjectiveCに使用可能なクラスのすべてのプロパティをマークする必要があります。私はSwift 4プロジェクトを持っており、それは私のためにうまくいきます。デバッグを容易にするために、これらが表の唯一の2つの属性であるかどうかを確認できますか? get/insert/queryなどの操作は正しく機能しますか?フィルタによるスキャンのみに影響がありますか?使用しているSDKのバージョンは何ですか? –