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)
我的代码遇到了问题。我似乎无法创建 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)