0

我正在测试将核心数据支持到 DynamoDB 上,并且我已经AWSPersistenceDynamoDBIncrementalStoreDelegate在我的应用程序委托上实现了,相关credentials方法是这样实现的:

- (AmazonCredentials *)credentials
{
    if(credentials==nil) {
        credentials = [[AmazonCredentials alloc] initWithAccessKey:@"ACCESS_KEY" withSecretKey:@"SECRET_KEY"];
    }
    return credentials;
}

显然适当地替换了我的真实安全凭证(这不是在生产中实现它的方式,但我不想为我正在做的原型设置一个 TVM)。

但是,当我尝试这样创建时Entity

Track *track = (Track*)[NSEntityDescription insertNewObjectForEntityForName:@"Track" inManagedObjectContext:appDelegate.managedObjectContext];

我收到以下错误:

error: Error Domain=com.amazonaws.coredata.AWSPersistenceDynamoDBClientErrorDomain Code=-1 "The operation couldn’t be completed. (com.amazonaws.coredata.AWSPersistenceDynamoDBClientErrorDomain error -1.)" UserInfo=0xa5363d0 {message=The protocol - (AmazonCredentials *)credentials didn't return a valid AmazonCredentials object.}

我可以看到该AmazonCredentials对象已实例化并且具有正确的详细信息,并且我可以使用相同的凭据来建立AmazonS3Client会话并从存储桶下载文件,因此它们绝对有效。

有没有人看到这个/知道问题是什么?

4

2 回答 2

1

好的,查看 Github 上的代码https://github.com/aws/aws-sdk-ios/blob/master/src-persistence/AWSPersistenceDynamoDBIncrementalStore.m它表明您必须使用三个 arg 构造函数,包括一个安全令牌使用 DynamoDB 来支持核心数据,如果在文档中提到这一点会很有用,但无论如何,总之你必须实现一个 TVM 才能做到这一点。

于 2013-01-15T14:14:25.050 回答
1

虽然当前 DynamoDB 客户端确实需要会话凭证,但这些凭证可以由安全令牌服务 (STS) 客户端提供,并且不需要实施 TVM。

适用于 iOS 的 STS 客户端

于 2013-01-15T20:32:35.447 回答