Грешка в рамката на Bolts continueWithBlock

Работя с AWS s3 от известно време и доскоро имах малки проблеми. Внасям рамката чрез cocoapods. Наскоро преинсталирах cocoapods в светлината на тази публикация.

След това имах милион и едно „използване на недеклариран тип: грешки, most в примитивни типове. В крайна сметка разреших това (в по-голямата си част) чрез деинсталиране на cocoapods, преинсталиране на cocoapods, изтриване, почистване и след това преинсталиране на pods за моите конкретни проект (с куп чисти проекти също).

Имах проблем, при който Bolts не беше включен (въпреки че вярвам, че е част от AWSCore). Добавих pod Bolts в моя Podfile и добавих #import <Bolts/Bolts.h> в моя obj-C -> Swift bridge файл.

Сега Bolts беше разпознат, но получавам грешка „Не мога да извикам „continueWithBlock““ със списък с аргументи от тип „((BFTask!) -> _)“ грешка със следния код:

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?


person Ryan    schedule 20.06.2015    source източник
comment
Забележка: всички други функции на S3 класове работят правилно; това е изключение.   -  person Ryan    schedule 21.06.2015


Отговори (3)


Можете да използвате AWSTask! в замяна на BFTask! (това е подклас), за да заглушите xcode.

person Ryan    schedule 25.08.2015

Разреших точно този проблем с удрянето на главата, след като опитах същите стъпки като вас, като върнах моите Pods към последната ми стабилна конфигурация.

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

Гадно е да се налага да правите това, но се надяваме, че това е временно решение. Приложението ми се изгражда и функционира добре в момента. Надявам се това да помогне и на вас.

person jbcaveman    schedule 24.06.2015
comment
Направих същото и пак имах нов набор от грешки. В крайна сметка замених BFTast! с AWSTask! да успееш. Благодаря, надяваме се между нашите две решения някой друг с този проблем да може да го разреши с по-малко главоболие. - person Ryan; 24.06.2015

Просто заменете думата на 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;
                        }];
                    }
person Saumil Shah    schedule 11.12.2015