0

我从亚马逊网站下载了用户偏好示例(用于 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);
}
}

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

4

2 回答 2

1

我是适用于 iOS 的 AWS 开发工具包的维护者之一。我很抱歉给您带来麻烦。

在此示例的最近更新中,我们丢失了此示例的 us-west-2(俄勒冈)区域的默认更改。这由AmazonDynamoDBClient在创建时设置的端点控制。您可以简单地修改AmazonClientManager.m中的代码以添加以下内容:

ddb.endpoint = [AmazonEndpoints ddbEndpoint:US_WEST_2];

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

于 2013-09-12T16:39:57.157 回答
-1

我找到了解决方案:

Region useast1 = Region.getRegion(Regions.US_EAST_1);
ddb.setRegion(useast1 );
于 2014-05-28T16:24:55.463 回答