gpt4 book ai didi

swift - 如何使用 Swift 3 从 Xib 加载 NSView

转载 作者:行者123 更新时间:2023-11-28 09:31:55 26 4
gpt4 key购买 nike

如何从Xib中正确加载NSView?

我的代码:

var topLevelArray: NSArray? = nil
let outputValue = AutoreleasingUnsafeMutablePointer<NSArray>(&topLevelArray)

if Bundle.main.loadNibNamed("RadioPlayerView", owner: nil, topLevelObjects: outputValue) {
let views = outputValue.pointee
return views.firstObject as! RadioPlayerView
}

topLevelArray = nil
return nil

问题是“outputValue”是一个自动释放指针,一旦我从函数返回,程序就会崩溃并显示 ACCESS_BAD_ADDRESS

最佳答案

我做了一个协议(protocol)和扩展来做到这一点:

import Cocoa

protocol NibLoadable {
static var nibName: String? { get }
static func createFromNib(in bundle: Bundle) -> Self?
}

extension NibLoadable where Self: NSView {

static var nibName: String? {
return String(describing: Self.self)
}

static func createFromNib(in bundle: Bundle = Bundle.main) -> Self? {
guard let nibName = nibName else { return nil }
var topLevelArray: NSArray? = nil
bundle.loadNibNamed(NSNib.Name(nibName), owner: self, topLevelObjects: &topLevelArray)
guard let results = topLevelArray else { return nil }
let views = Array<Any>(results).filter { $0 is Self }
return views.last as? Self
}
}

用法:

final class MyView: NSView, NibLoadable {
// ...
}

//创建名为 MyView.xib

的 xib

//... 其他地方:

let myView: MyView? = MyView.createFromNib()

关于swift - 如何使用 Swift 3 从 Xib 加载 NSView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40256755/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com