2016-04-07 19 views
2

我有遞增已保存在我的桌子上DynamoDB我的代碼目前是一個項目的一些屬性值掙扎:在AWS DynamoDB目標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

是的,更新表達式應該沒有pamentalhesis,並且您可能必須參數化屬性名稱 –

+0

***終止應用程序由於未捕獲的異常'NSInvalidArgumentException',原因:'+ [__ NSCFNumber JSONKeyPathsByPropertyKey]:無法識別的選擇器發送到class 0x113d10368' – csweeney285

回答

2

有幾件事情。 key定義如下:

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

您需要的AWSDynamoDBAttributeValue一個實例來代替@"KeyValue"

expressionAttributeValues定義如下:

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

您需要的AWSDynamoDBAttributeValue一個實例來代替@1

確保使用適用於iOS的最新版AWS SDK,以便您可以在頭文件中看到泛型註釋。它可以幫助你構建正確的請求對象。

+0

謝謝@Myu田佑。我將如何爲@ 1創建AWSDynamoAttributeValue的這個實例?如果我爲列表或地圖添加值,這是否也一樣? – csweeney285

+0

目前我擁有它:AWSDynamoDBAttributeValue * keyValue = [AWSDynamoDBAttributeValue new]; keyValue.N = @「1」; updateItemInput.updateExpression = @「add counter +:val)」; updateItemInput.expressionAttributeNames = @ { @「:val」:keyValue };但是這不斷返回一個錯誤。 – csweeney285

+0

我得到它的工作謝謝 – csweeney285