2016-04-07 18 views
2

I mit Erhöhen eines Nummer Eigenschaftswert eines Artikels bereits gespeichert in meinem Tisch habe Schwierigkeiten aktuell DynamoDB mein Code:Inkrementieren Immobilien in AWS 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; 
     }]; 

Meine app stürzt immer, wenn ich nicht tun Kommentiere die updateExpression und expressionAttributeValues ​​aus. Ich kann den Block erreichen, wenn ich eine leere Instanz meines Elementtyps erstelle und seltsame Ergebnisse erhalte, wenn ich eine Instanz von AWSDynamoDBAttributeValue erstelle, um den Schlüssel zu übergeben. Irgendwelche Vorschläge? Schreibe ich auch falsch meine updateExpression?

Ich werde auch hinzufügen und löschen Elemente in Array/Liste und Wörterbuch/Karte Eigenschaften auf ein anderes Objekt. Wie würde das anders sein?

+0

Wie stürzt es ab? Was ist die genaue Fehlermeldung, die Sie bekommen? –

+0

und ja, der Update-Ausdruck sollte ohne Paranthesis sein, und Sie müssen möglicherweise auch den Attributnamen parametrisieren –

+0

*** Beenden App aufgrund der nicht abgefangenen Ausnahme 'NSInvalidArgumentException', Grund: '+ [__ NSCFNumber JSONKeyPathsByPropertyKey]: unerkannter Selektor gesendet an Klasse 0x113d10368 ' – csweeney285

Antwort

2

Es gibt ein paar Dinge. key ist wie folgt definiert:

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

Sie benötigen @"KeyValue" mit einer Instanz von AWSDynamoDBAttributeValue zu ersetzen.

expressionAttributeValues ist wie folgt definiert:

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

Sie benötigen @1 mit einer Instanz von AWSDynamoDBAttributeValue zu ersetzen.

Stellen Sie sicher, dass Sie die neueste Version des AWS SDK für iOS verwenden, damit Sie die generischen Anmerkungen in der Headerdatei sehen können. Es hilft Ihnen, das richtige Anfrageobjekt zu konstruieren.

+0

Danke @YosukeMatsuda. Wie würde ich diese Instanz eines AWSDynamoAttributeValue für @ 1 erstellen? Ist das genauso, wenn ich auch einer Liste oder Karte einen Wert hinzufüge? – csweeney285

+0

Derzeit habe ich es als: AWSDynamoDBAttributeValue * keyValue = [AWSDynamoDBAttributeValue new]; keyValue.N = @ "1"; updateItemInput.updateExpression = @ "add counter +: val)"; updateItemInput.expressionAttributeNames = @ { @ ": val": Schlüsselwert }; Aber das bringt immer einen Fehler zurück. – csweeney285

+0

Ich habe es zu arbeiten, danke Ihnen beiden – csweeney285