CGImageSourceCreateWithData继续生成错误

时间:2015-10-24 23:46:16

标签: ios swift cgimage

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

这是错误:

  

警告:无法加载任何Objective-C类信息。这将显着降低可用类型信息的质量。

它一直没有使用此功能失败:

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.
}
}

1 个答案:

答案 0 :(得分:1)

你看过崩溃的堆栈痕迹了吗?我尝试了你的代码,问题似乎是初始化程序是递归调用的。

enter image description here

您拨打super.init(data: data, scale: scale),然后拨打self.init(data: data),调用方便的初始化程序,然后调用指定的初始化程序,然后再次调用super.init(data: data, scale: scale)

老实说,我不会将UIImage子类化,有很多桥接(很可能涉及魔法)到引擎盖下的CGImageRef。如果您坚持继承UIImage,请将指定的初始化程序调用{​​{1}}而不是super.init(data: data)