简体   繁体   English

从视图控制器访问NSButton子类属性时使用EXC_BAD_ACCESS

[英]EXC_BAD_ACCESS on accessing NSButton subclass property from view controller

I'm attempting to access a NSButton subclass property from a view controller, but receive the following error at the HoverButton's setImages method: 我正在尝试从视图控制器访问NSButton子类属性,但在HoverButton的setImages方法中收到以下错误:

EXC_BAD_ACCESS (code=1, adress=0x0) EXC_BAD_ACCESS(代码= 1,地址= 0x0)

It seems I'm losing reference, but I'm not sure how to maintain reference. 看来我正在失去参考,但是我不确定如何保持参考。 (Still very fresh to Swift & OS X dev) (对Swift和OS X开发人员来说仍然很新鲜)

In my view controller: 在我的视图控制器中:

@IBOutlet weak var newAccountButton: HoverButton!
@IBOutlet weak var joinAccountButton: HoverButton!
...
let off = NSImage(named: "button-off")!
let over = NSImage(named: "button-over")!
newAccountButton.setImages(imageOriginal: off, imageHover: over)
joinAccountButton.setImages(NSColor.clearColor(), imageOriginal: off, imageHover: over)

... ...

class HoverButton: NSButton {

    var trackingArea:NSTrackingArea!
    var hoverBackgroundImage: NSImage!
    var originalBackgroundImage: NSImage!


    override init(frame frameRect: NSRect) {

        super.init(frame: frameRect)

        // set tracking area
        trackingArea = NSTrackingArea(rect: bounds, options: [NSTrackingAreaOptions.MouseEnteredAndExited, NSTrackingAreaOptions.ActiveAlways], owner: self, userInfo: nil)
        self.addTrackingArea(trackingArea)

    }

    required init?(coder: NSCoder) {
        super.init(coder: coder)

        // set tracking area
        trackingArea = NSTrackingArea(rect: bounds, options: [NSTrackingAreaOptions.MouseEnteredAndExited, NSTrackingAreaOptions.ActiveAlways], owner: self, userInfo: nil)
        self.addTrackingArea(trackingArea)
    }

    override func drawRect(dirtyRect: NSRect) {
        super.drawRect(dirtyRect)
    }

    override func mouseEntered(theEvent: NSEvent) {
        let cell = self.cell as! NSButtonCell
        cell.image = hoverBackgroundImage

    }

    override func mouseExited(theEvent: NSEvent) {
        let cell = self.cell as! NSButtonCell
        cell.image = originalBackgroundImage
    }

    func setImages(imageOriginal: NSImage, imageHover: NSImage) {
        self.originalBackgroundImage = imageOriginal
        self.hoverBackgroundImage = imageHover
    }

}

based off https://github.com/Swift-Kit/JZHoverNSButton (use of which gives same error) 基于https://github.com/Swift-Kit/JZHoverNSButton (使用它会产生相同的错误)

问题是从笔尖或情节提要中的HoverButton实例到newAccountButtonjoinAccountButton属性没有插座。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM