Swift iOS8系统版本下,使用CIContext(opti

2019-01-09  本文已影响0人  sky_storming
问题描述:
问题解读:

可能是将Swift方法CIContext(options: [String: Any]?)转换为Objective-C对应的+ (CIContext *)contextWithOptions:(NSDictionary<NSString *,id> *)选项时遇到了一些问题;相反,Swift中它被转换为-[CIContext initWithOptions:],因此无法识别选择器。原文

解决方案:(两种)
  1. 若初始化时不需要传options参数,则可直接初始化,let context = CIContext();或者区分一下系统版本,iOS9.0以下使用let context = CIContext()方法,iOS9.0及以上使用let context = CIContext(options: nil)方法。
  2. 声明一个Objective-C的CIContext类目,并将初始化方法重新封装成一个类方法,供Swift调用,然后在模块桥接头中导入这个类别,并将原来的初始化方法“CIContext(options: nil)”替换为对类别中的类方法的调用“CIContext.jy_context(options: nil)”。
    类方法示例如下:
#import <CoreImage/CoreImage.h>

@interface CIContext (Workaround)

+ (CIContext *)jy_contextWithOptions:(NSDictionary<NSString *, id> *)options;

@end
#import "CIContext+Workaround.h"

@implementation CIContext (Workaround)

+ (CIContext *)jy_contextWithOptions:(NSDictionary<NSString *,id> *)options {
    return [CIContext contextWithOptions:options];
}

@end

参考:
StackOverFlow的解决办法
iOS [CIContext initWithOptions:]: unrecognized selector sent to instance 模拟器 iOS 8.4

上一篇 下一篇

猜你喜欢

热点阅读