【问题标题】:Swift3.0 Xcode8 iOS7 CIContext(options: nil) CrashSwift3.0 Xcode8 iOS7 CIContext(options: nil) 崩溃
【发布时间】:2017-03-07 07:15:20
【问题描述】:

以下代码在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。

【问题讨论】:

标签: ios ios7 swift3 xcode8


【解决方案1】:

由于 Swift 3 仅兼容 iOS 8+,因此它正在崩溃。

【讨论】:

    【解决方案2】:

    在 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])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多