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