CGImageSourceCreateWithData 继续产生错误

CGImageSourceCreateWithData continues generate errors

我的代码遇到了问题。我似乎无法创建 CGImageSource/CGImageSourceRef,但是我看到的每个回购协议都使用完全相同的方法。我已经测试过数据对象是否包含 gif 并且确实包含。所以我已将此错误隔离到 CGImageSourceCreateWithData 函数,但我不知道如何修复它。任何帮助将不胜感激。

这是错误:

warning: could not load any Objective-C class information. This will significantly reduce the quality of type information available.

这个函数总是失败:

var imgSource = CGImageSourceCreateWithData(data, nil)

这是我不断失败的简单代码:

import UIKit
import ImageIO
import MobileCoreServices
import AVFoundation    

class LCGIFImage: UIImage {

//MARK: Initializers

convenience override init?(contentsOfFile path: String) {
    let data = NSData(contentsOfURL: NSURL(string: path)!)
    self.init(data: data!)
}

convenience override init?(data: NSData) {
    self.init(data: data, scale: 1.0)
}

override init?(data: NSData, scale: CGFloat) {
    var imgSource = CGImageSourceCreateWithData(data, nil)


    super.init(data: data, scale: scale)
}

required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
}

required convenience init(imageLiteral name: String) {
    fatalError("init(imageLiteral:) has not been implemented")
}
}



class ViewController: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()
    let path = NSBundle.mainBundle().URLForResource("1", withExtension: "gif")?.absoluteString as String!
    let test = LCGIFImage(contentsOfFile: path)

}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}
}

您是否查看过崩溃的堆栈跟踪?我试过你的代码,问题似乎是初始化程序被递归调用。

你调用 super.init(data: data, scale: scale),然后它调用 self.init(data: data),它调用你方便的初始化器,然后调用你指定的初始化器,这个又调用了 super.init(data: data, scale: scale)

老实说,我不会子类化 UIImage,在幕后涉及到 CGImageRef 的很多桥接(很可能涉及魔法)。如果您坚持子类化 UIImage,请将指定的初始化程序调用 super.init(data: data) 而不是 super.init(data: data, scale: scale)