2017-10-04 13 views
1

私は最近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に戻って変換する以外の解決策はありますか?ありがとう。

+0

文字列は、モデルタイプのために働く必要があります:あなたは@objc使用してObjectiveCに利用可能なプロパティをマークするか、参照してください。例えば@objcMembers

を使用してObjectiveCに使用可能なクラスのすべてのプロパティをマークする必要があります。私はSwift 4プロジェクトを持っており、それは私のためにうまくいきます。デバッグを容易にするために、これらが表の唯一の2つの属性であるかどうかを確認できますか? get/insert/queryなどの操作は正しく機能しますか?フィルタによるスキャンのみに影響がありますか?使用しているSDKのバージョンは何ですか? –

答えて

関連する問題