2015-06-06 50 views
2

我在使用AWS SDK iOS v2.1.1以編程方式啓用對現有存儲桶的版本控制時遇到問題。錯誤是-[NSNull _fastCharacterContents]: unrecognized selector sent to instance ...。我的代碼片段創建執行該putBucketVersioning方法的錯誤結果:以編程方式在AWS S3上啓用版本控制

AWSS3VersioningConfiguration *conf = [AWSS3VersioningConfiguration new]; 
    conf.status = AWSS3BucketVersioningStatusEnabled; 

    AWSS3PutBucketVersioningRequest *versionRequest = [AWSS3PutBucketVersioningRequest new]; 
    versionRequest.bucket = createBucketReq.bucket; 
    versionRequest.versioningConfiguration = conf; 

    [[[AWSS3 S3ForKey:key] putBucketVersioning:versionRequest] continueWithBlock:^id(BFTask *task) { 

     return task; 
} 

我可能缺少我如何創建AWSS3PutBucketVersioningRequest請求的自變量,但我不能找到任何實例或文件,將點我正確的方向。 Java,Cocoa或Swift中的任何建議都非常受歡迎。歡呼聲中,特龍

UPDATE:

根據意見,我包括完整的方法和已經啓用AWSLogging詳細的錯誤後輸出。

-(BFTask*) enableVersioningOfBucket:(NSString*)bucket region:(NSInteger) region { 

    [self setupCredentialsForRegion:region]; 
    NSString *key = [NSString stringWithFormat:@"regionkey%li",region]; 

    AWSS3VersioningConfiguration *conf = [AWSS3VersioningConfiguration new]; 
    conf.status = AWSS3BucketVersioningStatusEnabled; 

    AWSS3PutBucketVersioningRequest *versionRequest = [AWSS3PutBucketVersioningRequest new]; 
    versionRequest.bucket = bucket; 
    versionRequest.versioningConfiguration = conf; 
    NSLog(@"Config %@",versionRequest); 

    return [[[AWSS3 S3ForKey:key] putBucketVersioning:versionRequest] continueWithBlock:^id(BFTask *task) { 
     NSLog(@"Put bucket versioning %@ - %@", task, task.result); 
     return task; 
    }]; 
} 

日誌信息:

2015-06-06 12:09:41.822 connectS3[50137:6337899] Config <AWSS3PutBucketVersioningRequest: 0x600000082350> { 
    bucket = testbucket; 
    versioningConfiguration = "<AWSS3VersioningConfiguration: 0x600000024bc0> {\n MFADelete = 0;\n status = 1;\n}";} 
    2015-06-06 12:09:41.832 connectS3[50137:6337899] -[NSNull _fastCharacterContents]: unrecognized selector sent to instance 0x7fff7724c210 

更新2

下面的圖像示出了堆棧跟蹤作爲錯誤信息剛剛出現當我使用斷點和步驟進入每個方法調用。 enter image description here

更新3 我安裝我的憑據,如下所述。除了啓用版本控制之外,這對我與S3連接的所有其他方法都正常工作。

 AWSStaticCredentialsProvider *credentialsProvider = [[AWSStaticCredentialsProvider alloc ] 
                  initWithAccessKey:keychainStore[ACCESS_KEY_ID] 
                  secretKey:keychainStore[SECRET_KEY]]; 

     AWSServiceConfiguration *configuration = [[AWSServiceConfiguration alloc] initWithRegion:region 
                  credentialsProvider:credentialsProvider]; 

     /* One credential configuration for each region **/ 
     NSString *key = [NSString stringWithFormat:@"regionkey%li",region]; 
     [AWSS3 registerS3WithConfiguration:configuration forKey:key]; 

     /* Default credentialsProvider **/ 
     [AWSServiceManager defaultServiceManager].defaultServiceConfiguration = configuration; 

感謝您的幫助!

+0

你應該[啓用](http://docs.aws.amazon.com/mobile/sdkforios/developerguide/setup .html#logging)詳細日誌併發布日誌。 (請刪除日誌中的所有敏感信息。)另外,是否可以包含異常的堆棧跟蹤? –

+0

@YosukeMatsuda感謝您的評論。我已經添加了一些更多的細節。 –

+0

'AWSS3'的實例可能構建不正確。你可以分享你如何配置服務客戶端(你調用'+ registerS3WithConfiguration:forKey:'的部分)嗎? –

回答

1

我可以確認它是當前AWS Mobile SDK中的一個錯誤。我們將在未來的版本中修復它。感謝您的報告。

有關解決方法,可以將下面的行添加到您AWSS3VersioningConfiguration代碼:

AWSS3VersioningConfiguration *conf = [AWSS3VersioningConfiguration new]; 
    conf.status = AWSS3BucketVersioningStatusEnabled; 
    conf.MFADelete = AWSS3MFADeleteDisabled; // <------ Add this line 
... 
+0

當您在AWS SDK中修復此問題時,您是否介意發送評論?謝謝! T. –

+0

我測試了AWS SDK的新版本2.2.1,但這個問題似乎沒有得到修復。你知道這個問題是否正在研究?謝謝你的幫助! T. –

+0

2.2.1尚未包含此修復程序,我們將在下一個版本中修復它。同時,您可以使用此答案中提到的解決方法。 –