Swift 螺栓框架连续存在块错误

Swift 螺栓框架连续存在块错误,swift,amazon-s3,cocoapods,bolts-framework,bftask,Swift,Amazon S3,Cocoapods,Bolts Framework,Bftask,我已经在AWS s3上工作了一段时间,直到最近才遇到一些小问题。我通过cocoapods导入框架。最近,我重新安装了cocoapods 后来,我使用了无数个“未声明类型:错误”。我最终解决了这个问题(大部分情况下),方法是卸载cocoapods,重新安装cocoapods,删除、清理,然后重新安装我特定项目的pods(以及一系列项目清理) 我有一个问题,螺栓没有包括在内(尽管我相信它是AWSCore的一部分)。我将吊舱螺栓添加到我的吊舱文件中,并将#import添加到我的obj-C->Swift

我已经在AWS s3上工作了一段时间,直到最近才遇到一些小问题。我通过cocoapods导入框架。最近,我重新安装了cocoapods

后来,我使用了无数个“未声明类型:错误”。我最终解决了这个问题(大部分情况下),方法是卸载cocoapods,重新安装cocoapods,删除、清理,然后重新安装我特定项目的pods(以及一系列项目清理)

我有一个问题,螺栓没有包括在内(尽管我相信它是AWSCore的一部分)。我将
吊舱螺栓
添加到我的吊舱文件中,并将
#import
添加到我的obj-C->Swift bridge文件中

现在,已识别出Bolts,但我收到一个错误“Cannotinvoke'continueWithBlock'”,其参数列表类型为“((BFTask!)->”错误,代码如下:

transfer_manager.getObject(request).continueWithBlock(//error here
                    {(task: BFTask!) in
                           //completion logic
                            return nil //was not necessary prior
                    })
桥梁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>

关于如何(正如我看到的问题)让Xcode/Swift再次正确识别螺栓/BFTask,有什么想法吗?

在尝试了与您相同的步骤后,我通过将吊舱恢复到上一个稳定配置,解决了这个问题

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

不得不这么做很糟糕,但希望这只是一个临时解决办法。我的应用程序现在正在构建并运行良好。希望这也能对您有所帮助。

您可以使用AWSTask!代替BFTask!(它是一个子类)使xcode静音。

只需将BFTask一词替换为AWSTask即可。

导入以下文件和框架

#import <AssetsLibrary/AssetsLibrary.h>
#import "AWSS3.h"
#import "Constants.h"
上传时使用以下方法

 - (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;
                        }];
                    }

注意:所有其他S3类函数都能正常工作;这是一个例外。我也这样做了,但仍然有一组新的错误。我最终成功地用AWSTask!替换了BFTast!。谢谢,希望在我们的两个解决方案之间,有此问题的任何其他人都能解决它,而不会那么头痛。
   - (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;
                        }];
                    }