【问题标题】:Thread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0) Swift on macOS appp线程 1:EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0) macOS 应用程序上的 Swift
【发布时间】: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:提供有关错误的更多详细信息(错误消息,它所在的行,回溯)

标签: ios swift macos


【解决方案1】:

我找到了解决方案; in apple sandbox documentation

如果应用程序在您尝试运行时崩溃,特别是通过接收 EXC_BAD_INSTRUCTION 信号,最可能的原因是您之前运行了一个沙盒应用程序,该应用程序具有相同的包标识符但代码签名不同。启动时崩溃是一项应用沙盒安全功能,可防止一个应用伪装成另一个应用,从而获得对另一个应用容器的访问权限。

然后改变这一行

let cgImage = texture.imageFromTexture()!.takeRetainedValue()

如下

let cgImage = texture.imageFromTexture()!.takeUnretainedValue()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-06
    • 2016-05-13
    • 1970-01-01
    • 2015-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多