【发布时间】:2021-11-04 07:48:16
【问题描述】:
在下一行中有一个我从另一个文件调用的函数。
import Cocoa
class ViewController: NSViewController {
override func viewDidLoad() {
super.viewDidLoad()
var result = myFunc()
// Do any additional setup after loading the view.
}
该函数成功运行,但是当它完成时,我得到这样的结果。
在 AppDelegate 中 @main 线程 1:EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)
导致崩溃的代码sn-p:
do {
try FileManager.default.createDirectory(at: textureURL.deletingLastPathComponent(), withIntermediateDirectories: true)
} catch {
print("Couldn't create output directory")
print(error)
return false
}
guard let texture = textureSampler.texture else {
continue
}
let cgImage = texture.imageFromTexture()!.takeRetainedValue()
let nsBitmap = NSBitmapImageRep(cgImage: cgImage)
var imageType: NSBitmapImageRep.FileType
let textureType = textureURL.pathExtension.lowercased()
switch(textureType) {
case "png":
imageType = .png
case "jpg", "jpeg":
imageType = .jpeg
default:
print("Unknown texture type \"\(textureType)\" of texture \(textureURL.lastPathComponent)")
imageType = .png
}
if convertToPNG {
// override automatic selection here
imageType = .png
textureURL = textureURL.deletingPathExtension().appendingPathExtension("png")
}
let imageData = nsBitmap.representation(using: imageType, properties: [
NSBitmapImageRep.PropertyKey.compressionFactor: NSNumber(floatLiteral: 1.0)
])!
do {
try imageData.write(to: textureURL)
alreadySaved.append(textureURL)
} catch {
print("Couldn't save \(textureURL.lastPathComponent)")
return false
}
【问题讨论】:
-
如果不分享 myFunc 的代码,我相信您无法获得有用的答案。
-
分享
myFunc()以防万一。另外,你能和我们分享一下控制台输出的内容吗?你可能有一些有用的信息...... -
有趣的是,当我一个接一个地运行这个函数时,它并没有报错,但是每当这个代码运行结束时,应用程序就会崩溃。
-
这可能意味着一旦完成,您的代码将尝试访问已从内存中释放的内容。检查你是否没有在闭包或类似的东西中保留自我。还将您的“结果”变量声明从 viewDidLoad 内部移动到类根的属性。
-
这里有很多力量展开,如果没有你,很难缩小问题的范围:将示例精简到其本质,2:提供有关错误的更多详细信息(错误消息,它所在的行,回溯)