2014-10-22 2 views
0

Я использую DynamoDB SDK v2. Я могу сканировать базу данных, но я изо всех сил пытаюсь запросить ее для получения конкретных результатов. Я не знаю, неправильно ли настроен БД или я неправильно делаю запрос.Query Amazon DynamoDB для конкретного результата

Когда я использую

- (void)getTableRow:(NSString *)rangeKey { 
      AWSDynamoDBObjectMapper *dynamoDBObjectMapper = [AWSDynamoDBObjectMapper defaultDynamoDBObjectMapper]; 
      [[dynamoDBObjectMapper load:[SonicUserTableRow class] 
           hashKey:@"UserId" 
           rangeKey:rangeKey] continueWithExecutor:[BFExecutor mainThreadExecutor] withBlock:^id(BFTask *task) { 
       if (!task.error) { 

        SonicUserTableRow *tableRow = task.result; 

        NSLog (@"Table Row %@", tableRow); 

      } else { 
       //Catch Error 

      } 
      return nil; 
     }]; 
} 

Я зову его с помощью [self getTableRow:@" ENTER UNIQUE USER ID "];

Однако я получаю ошибку

The provided key element does not match the schema 

Как я могу это исправить?

Примечание. Я использую новый Amazon SDK v2.

Моя база данных enter image description here

HASH & RANGE КЛЮЧИ

enter image description here

SonicUserTableRow .m

+ (NSString *)dynamoDBTableName { 
    return @"SonicUsers"; 
} 

+ (NSString *)hashKeyAttribute { 
    return @"UserId"; 
} 

+ (NSString *)rangeKeyAttribute { 
    return @"Username"; 
} 

SonicUserTableRow .h

@interface SonicUserTableRow : AWSDynamoDBModel <AWSDynamoDBModeling> 

@property (nonatomic, strong) NSString *UserId; 
@property (nonatomic, strong) NSString *Username; 
@property (nonatomic, strong) NSString *profileImage; 
@property (nonatomic, strong) NSString *active; 
@property (nonatomic, strong) NSString *email; 
@property (nonatomic, strong) NSString *flags; 
@property (nonatomic, strong) NSString *attuned; 

У меня есть значение UserIdString: us-east-1:4ae0a93a-59a6-45fd-80c8-ff6b99f1d152 UserId в базе данных так, пытаюсь вызвать, например: [self getTableRow:@"us-east-1:4ae0a93a-59a6-45fd-80c8-ff6b99f1d152"];

ответ

0

DropId Если хэш ключ вашей таблицы, вы можете использовать - load:hashKey:rangeKey: для загрузите один элемент.

+0

У нас есть образец сопоставления объектов DynamoDB в наших [образцах GitHub repo] (https://github.com/awslabs/aws-sdk-ios-samples). –

+0

Стреляйте, чтобы это работало даже с github. Обновлен вопрос с тем, что я сделал, и наградой за награду – memyselfandmyiphone

+0

Вы должны поделиться определением 'SonicUserTableRow' (файлы .h и .m). Он может быть настроен неправильно. –