以下代码在iOS7 +的Swift2.2,iOS8 +的Swift3.0中运行良好,仅在Swift3.0 iOS7中崩溃。
let context = CIContext(options: nil)
控制台信息:
- [CIContext initWithOptions:]:发送到实例的无法识别的选择器 0x147366e0 2016-10-25 17:32:27.903 CMBMobile DEV [1017:4403] *** 由于未捕获的异常而终止应用程序 ' NSInvalidArgumentException',原因:' - [CIContext initWithOptions:]: 无法识别的选择器发送到实例0x147366e0'
我试着将其改成
let context = CIContext()
但似乎上下文的实例没有被初始化,因为它的地址是0x00000000
。当我调用context.createCGImage(ciimage, from: originRect)
时,返回意外的nil。
答案 0 :(得分:0)
由于Swift 3仅兼容iOS 8+,因此崩溃了。
答案 1 :(得分:0)
在Swift3.0中,这是Apple的一个错误。 您可以为CIContext创建一个类别。
#import <CoreImage/CoreImage.h>
@interface CIContext (FixBug)
+ (CIContext *)swiftContextWithOptions:(NSDictionary<NSString *, id> *)options;
@end
#import "CIContext+FixBug.h"
@implementation CIContext (FixBug)
+ (CIContext *)swiftContextWithOptions:(NSDictionary<NSString *,id> *)options {
return [CIContext contextWithOptions:options];
}
@end
你应该使用这个功能。
let context = CIContext.swiftContext(options: [kCIContextUseSoftwareRenderer: false])