2

私は私のコードは、現在あるDynamoDBの上で、すでに私のテーブルに保存されたアイテムの数のプロパティ値をインクリメントして苦労しています:インクリメント数プロパティのObjective C

 AWSDynamoDBUpdateItemInput *updateItemInput = [AWSDynamoDBUpdateItemInput new]; 
     updateItemInput.tableName = @"Table"; 

     updateItemInput.key= @{ 
           @"KeyPropertyName":@"KeyValue" 
           }; 
     updateItemInput.updateExpression = @"SET(counter = counter + :val)"; 
     updateItemInput.expressionAttributeValues [email protected]{ 
                @":val":@1 
                }; 
     AWSDynamoDB *dynamoDB = [AWSDynamoDB defaultDynamoDB]; 

     [[dynamoDB updateItem:updateItemInput] 
     continueWithBlock:^id(AWSTask *task) { 
      if (task.error) { 
       NSLog(@"The request failed. Error: [%@]", task.error); 
      } 
      if (task.exception) { 
       NSLog(@"The request failed. Exception: [%@]", task.exception); 
      } 
      if (task.result) { 
       //Do something with result. 
      } 
      return nil; 
     }]; 

私がいない時に私のアプリが常にクラッシュupdateExpressionとexpressionAttributeValuesをコメントアウトします。アイテムタイプの空のインスタンスを作成し、AWSDynamoDBAttributeValueのインスタンスを作成してキーを渡すと、奇妙な結果が得られます。助言がありますか? updateExpressionも間違って書いていますか?

また、別のオブジェクトの配列/リストと辞書/マップのプロパティの更新と削除を追加する予定です。これはどうやって違いますか?

+0

どのようにクラッシュしますか?あなたが得ている正確なエラーメッセージは何ですか? –

+0

であり、更新式はparanthesisなしである必要があります。また、属性名をパラメータ化する必要があるかもしれません。 –

+0

***キャッチされない例外 'NSInvalidArgumentException'、理由: '+ [__ NSCFNumber JSONKeyPathsByPropertyKey]クラス0x113d10368 ' – csweeney285

答えて

2

いくつかあります。あなたがAWSDynamoDBAttributeValueのインスタンスで@"KeyValue"を交換する必要が

@property (nonatomic, strong) NSDictionary<NSString *, AWSDynamoDBAttributeValue *> * _Nullable key; 

次のようにkeyが定義されています。あなたがAWSDynamoDBAttributeValueのインスタンスで@1を交換する必要が

@property (nonatomic, strong) NSDictionary<NSString *, AWSDynamoDBAttributeValue *> * _Nullable expressionAttributeValues; 

次のように

expressionAttributeValuesが定義されています。

iOSのAWS SDKの最新バージョンを使用して、ヘッダーファイルにジェネリックアノテーションを表示できるようにしてください。これは、適切なリクエストオブジェクトを構築するのに役立ちます。

+0

ありがとうございます@ヨースケ松田。 @ 1のAWSDynamoAttributeValueのインスタンスを作成するにはどうすればよいですか?リストやマップに値を追加する場合も同じですか? – csweeney285

+0

現在、私はそれを持っています:AWSDynamoDBAttributeValue * keyValue = [AWSDynamoDBAttributeValue new]; keyValue.N = @ "1"; updateItemInput.updateExpression = @ "add counter +:val)"; @ ":val":keyValue }しかし、これはエラーを返し続けます。 – csweeney285

+0

私はそれを働かせてくれましたありがとうございました – csweeney285

関連する問題