2

私はしばらくの間 AWS s3 を使用してきましたが、最近までほとんど問題がありませんでした。ココアポッドを介してフレームワークをインポートします。最近、この投稿に照らしてココアポッドを再インストールしました。

その後、宣言されていない型の使用が 100 万 1 回ありました。そのほとんどはプリミティブ型でした。最終的には、(ほとんどの場合) cocoapod をアンインストールし、cocoapod を再インストールし、削除、クリーニングしてから、特定のプロジェクトの Pod を再インストールすることで、これを解決しました (プロジェクトのクリーンアップも多数あります)。

Bolts が含まれていないという問題がありました (AWSCore の一部だと思いますが)。pod BoltsPodfile に追加し#import <Bolts/Bolts.h>、obj-C -> Swift ブリッジ ファイルに追加しました。

これで、Bolts は認識されましたが、次のコードで「((BFTask!) -> _)」型の引数リストで「'continueWithBlock' を呼び出すことができません」というエラーが表示されます。

transfer_manager.getObject(request).continueWithBlock(//error here
                    {(task: BFTask!) in
                           //completion logic
                            return nil //was not necessary prior
                    })

bridge.h:

#import <Bolts/Bolts.h> //was unneeded before reinstalling cocoapods
#import <AWSCore/AWSCore.h>
#import <AWSS3/AWSS3.h>
#import <AWSDynamoDB/AWSDynamoDB.h>
#import <AWSSQS/AWSSQS.h>
#import <AWSSNS/AWSSNS.h>
#import <AWSCognito/AWSCognito.h>

最後に、私のPodfile:

platform :ios, '8.0'enter code here

source 'https://github.com/CocoaPods/Specs.git'
pod 'Bolts' #was unneeded before reinstalling cocoapods
pod 'AWSCore'
pod 'AWSAutoScaling'
pod 'AWSCloudWatch'
pod 'AWSDynamoDB'
pod 'AWSEC2'
pod 'AWSElasticLoadBalancing'
pod 'AWSKinesis'
pod 'AWSLambda'
pod 'AWSMachineLearning'
pod 'AWSMobileAnalytics'
pod 'AWSS3'
pod 'AWSSES'
pod 'AWSSimpleDB'
pod 'AWSSNS'
pod 'AWSSQS'
pod 'AWSCognito'

(私が問題を見て)Xcode/SwiftにBolts/BFTaskを再び正しく認識させる方法についてのアイデアはありますか?

4

3 に答える 3

2

ポッドを最後の安定した構成に戻すことで、あなたと同じ手順を試した後、この正確なヘッドバンギングの問題を解決しました。

pod 'Bolts', '1.1.5' 
pod 'AWSCore', '2.1.1'
pod 'AWSS3', '2.1.1'

それをしなければならないのは残念ですが、うまくいけばそれは一時的な回避策です。私のアプリは現在、正常に構築および機能しています。これもあなたに役立つことを願っています。

于 2015-06-24T17:33:04.297 に答える
1

BFTask の単語を AWSTask に置き換えるだけです。

次のファイルとフレームワークをインポートします

#import <AssetsLibrary/AssetsLibrary.h>
#import "AWSS3.h"
#import "Constants.h"

ここにファイル パスを指定します

   - (void)fileUpload {
                NSError *error = nil;
                if (![[NSFileManager defaultManager] createDirectoryAtPath:[NSTemporaryDirectory() stringByAppendingPathComponent:@"upload"]
                                               withIntermediateDirectories:YES
                                                                attributes:nil
                                                                     error:&error]) {
                    NSLog(@"reating 'upload' directory failed: [%@]", error);
                }

                //    UIImage *image = [UIImage imageNamed:@"Screen Shot 2015-06-16 at 7.25.09 pm"];
                //
                //    NSString *fileName = [[[NSProcessInfo processInfo] globallyUniqueString] stringByAppendingString:@".png"];
                //    NSString *filePath = [[NSTemporaryDirectory() stringByAppendingPathComponent:@"upload"] stringByAppendingPathComponent:fileName];
                //    NSData * imageData = UIImagePNGRepresentation(image);
                //
                //    [imageData writeToFile:filePath atomically:YES];

                NSString *filePath = [[NSBundle mainBundle] pathForResource:@"Untitled" ofType:@"mov"];

                //    NSError *error = nil;
                NSData *data = [NSData dataWithContentsOfFile:filePath];
                if(data == nil && error!=nil) {
                    //Print error description
                }

                AWSS3TransferManagerUploadRequest *uploadRequest = [AWSS3TransferManagerUploadRequest new];
                uploadRequest.body = [NSURL fileURLWithPath:filePath];
                uploadRequest.key = @"video1.mov";
                uploadRequest.bucket = S3BucketName;

                [self upload:uploadRequest];
                // Do any additional setup after loading the view, typically from a nib.
            }

アップロードには次の方法を使用します

 - (void)upload:(AWSS3TransferManagerUploadRequest *)uploadRequest {
                        AWSS3TransferManager *transferManager = [AWSS3TransferManager defaultS3TransferManager];


                        [[transferManager upload:uploadRequest] continueWithBlock:^id(AWSTask *task) {
                            if (task.error) {
                                if ([task.error.domain isEqualToString:AWSS3TransferManagerErrorDomain]) {
                                    switch (task.error.code) {
                                        case AWSS3TransferManagerErrorCancelled:
                                        case AWSS3TransferManagerErrorPaused:
                                        {
                                            dispatch_async(dispatch_get_main_queue(), ^{
                                                //update UI
                                            });
                                        }
                                            break;

                                        default:
                                            NSLog(@"Upload failed: [%@]", task.error);
                                            break;
                                    }
                                } else {
                                    NSLog(@"Upload failed: [%@]", task.error);
                                }
                            }

                            if (task.result) {
                                dispatch_async(dispatch_get_main_queue(), ^{
                                    //Successfully uploaded.
                                    NSLog(@"Successfully uploaded");

                                    //update UI here.
                                });
                            }

                            return nil;
                        }];
                    }
于 2015-12-11T07:01:06.387 に答える