2016-04-07 43 views
2

: I do not zamanZaten benim kod şu anda DynamoDB benim tabloya kaydedilir bir öğenin bir dizi özellik değer artırma ile mücadele ediyorum

 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; 
     }]; 

Benim uygulamanın her zaman çöküyor updateExpression ve expressionAttributeValues ​​hakkında yorum yapın. Anahtarımı iletmek için AWSDynamoDBAttributeValue örneğini oluşturduğumda, öğe türümün boş bir örneğini oluşturduğumda ve tuhaf sonuçlar aldığımda bloğa erişebilirim. Baska öneri? Ayrıca updateExpression'umu yanlış yazıyor muyum?

Ayrıca, başka bir nesnede dizi/liste ve sözlük/harita özelliklerinde öğelerin güncellenmesini ve silinmesini de ekleyeceğim. Bu nasıl farklı olur?

+0

nasıl kilitleniyor? Aldığınız tam hata mesajı nedir? –

+0

ve evet, güncelleme ifadesi parantez olmadan olmalı ve özellik ismini de –

+0

parametrelendirmeniz gerekebilir *** Yakalanmamış istisna 'NSInvalidArgumentException' nedeniyle sonlandırma uygulaması, nedeni: '+ [__ NSCFNumber JSONKeyPathsByPropertyKey]: tanınmayan seçici 0x113d10368 ' – csweeney285

cevap

2

Birkaç şey var. Sen AWSDynamoDBAttributeValue bir örneğiyle @"KeyValue" değiştirmeniz gerekiyor

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

şu şekildedir: key tanımlanır. Sen AWSDynamoDBAttributeValue bir örneğiyle @1 değiştirmeniz gerekiyor

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

şu şekildedir:

expressionAttributeValues tanımlanır.

iOS için AWS SDK'nın en son sürümünü kullandığınızdan emin olun, böylece başlık dosyasındaki jenerik ek açıklamalarını görebilirsiniz. Doğru istek nesnesini oluşturmanıza yardımcı olur.

+0

eksik @YosukeMatsuda kapsar. 1 için AWSDynamoAttributeValue örneğini nasıl oluşturabilirim? Bir listeye veya haritaya da değer ekliyorsam, bu aynı mıdır? – csweeney285

+0

Şu andaki gibi: AWSDynamoDBAttributeValue * keyValue = [AWSDynamoDBAttributeValue new]; keyValue.N = @ "1"; updateItemInput.updateExpression = @ "sayaç ekle +: val)"; updateItemInput.expressionAttributeNames = @ { @ ": val": keyValue }; Ama bu bir hata döndürmeye devam ediyor. – csweeney285

+0

Çalışmaya başladım, ikinize de teşekkürler. – csweeney285