ios dynamodb没有正确注册表

时间:2013-09-12 04:10:05

标签: ios amazon-web-services amazon-dynamodb create-table

我从亚马逊网站下载了用户首选项示例(适用于Xcode)。我按要求在代码中插入了我的密钥。然后运行应用程序。它应该创建一个名为TestUserPrefence的表。它似乎在应用程序中正确执行此操作,因为应用程序在创建表并插入数据后工作正常;但是,当您转到用于dynamoDB的AWS控制台时,尚未创建该表。此外,当我退出应用程序并再次运行它时,表格已经消失,我必须重新创建它。

那么如何在目标c中添加表格并且aws控制台可以看到它?

以下是应该创建表的代码(从示例中复制)。

#define TEST_TABLE_NAME              @"TestUserPreference"
#define TEST_TABLE_HASH_KEY          @"userNo"


+(void)createTable
{
DynamoDBCreateTableRequest *createTableRequest = [[DynamoDBCreateTableRequest new] autorelease];

DynamoDBProvisionedThroughput *provisionedThroughput = [[DynamoDBProvisionedThroughput new] autorelease];
provisionedThroughput.readCapacityUnits  = [NSNumber numberWithInt:10];
provisionedThroughput.writeCapacityUnits = [NSNumber numberWithInt:5];

DynamoDBKeySchemaElement *keySchemaElement = [[[DynamoDBKeySchemaElement alloc] initWithAttributeName:TEST_TABLE_HASH_KEY
                                                                                           andKeyType:@"HASH"] autorelease];
DynamoDBAttributeDefinition *attributeDefinition = [[DynamoDBAttributeDefinition new] autorelease];
attributeDefinition.attributeName = TEST_TABLE_HASH_KEY;
attributeDefinition.attributeType = @"N";

createTableRequest.tableName = TEST_TABLE_NAME;
createTableRequest.provisionedThroughput = provisionedThroughput;
[createTableRequest addKeySchema:keySchemaElement];
[createTableRequest addAttributeDefinition:attributeDefinition];

DynamoDBCreateTableResponse *response = [[AmazonClientManager ddb] createTable:createTableRequest];
if(response.error != nil)
{
    [AmazonClientManager wipeCredentialsOnAuthError:response.error];
    NSLog(@"Error: %@", response.error);
}
}

更多信息:我发现桌子是在不同的服务器上创建的(北弗吉尼亚出于某种原因),而不是我在控制台上看到的那个(默认为俄勒冈州)。显然,您必须在应用程序将要使用的服务器上的控制台中创建表;但是,似乎没有办法设置它。

2 个答案:

答案 0 :(得分:1)

我是AWS SDK for iOS的维护者之一。对不起,我很抱歉。

在此示例的最近更新中,我们失去了此示例中默认为us-west-2(Oregon)区域的更改。这由创建时AmazonDynamoDBClient上设置的端点控制。您只需修改AmazonClientManager.m中的代码即可添加以下内容:

ddb.endpoint = [AmazonEndpoints ddbEndpoint:US_WEST_2];

这将创建/使用us-west-2区域中的表。

答案 1 :(得分:-1)

我找到了解决方案:

Region useast1 = Region.getRegion(Regions.US_EAST_1);
ddb.setRegion(useast1 );