(SWIFT)错误:游乐场执行中止:错误:执行被中断,原因:EXC_BAD_INSTRUCTION(代码= EXC_I386_INVOP,子代码= 0x0)

时间:2017-03-27 23:49:13

标签: swift swift3 sprite-kit swift-playground

我收到此错误代码

错误:游乐场执行中止:错误:执行被中断,原因:EXC_BAD_INSTRUCTION(代码= EXC_I386_INVOP,子代码= 0x0)。 该过程一直处于中断状态,使用"线程返回-x"返回表达评估之前的状态。

这是我的代码:

import Cocoa
import SpriteKit
import PlaygroundSupport

public class Scene: SKScene {

var point = CGPoint(x: 0,y : 0)
let viewFrame = CGRect(x:0,y:0, width: 1080, height: 1080)

override init(size: CGSize) {

    super.init(size: size)
            //these 3 lines are the problem

    let options = [NSTrackingAreaOptions.mouseMoved, NSTrackingAreaOptions.activeInKeyWindow] as NSTrackingAreaOptions
    let tracker = NSTrackingArea(rect: view, options: options, owner: self.view, userInfo: nil)
    self.view?.addTrackingArea(tracker)               //print(self.view!)

    //Intro
    let welcomeLabel = SKLabelNode(text: "Music Box")
    welcomeLabel.fontColor = #colorLiteral(red: 1, green: 1, blue: 1, alpha: 1)
    welcomeLabel.position = CGPoint(x: size.width / 2, y: size.height/2)
    welcomeLabel.fontSize = 150

    addChild(welcomeLabel)

    delay(3.0)
    {
        let fadeOutAction = SKAction.fadeAlpha(to: 0.0, duration: 1.0)
        welcomeLabel.run(fadeOutAction)
        self.demo()
    }
}

required public init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}

func demo() {
    let songLabel = SKLabelNode(text: "song - SONG NAME")
    songLabel.fontColor = #colorLiteral(red: 1, green: 1, blue: 1, alpha: 1)
    songLabel.position = CGPoint(x: size.width / 2, y: size.height/12)
    songLabel.fontSize = 50
    songLabel.alpha = 0.0

    addChild(songLabel)

    let fadeInAction = SKAction.fadeAlpha(to: 1.0, duration: 1.0)

    songLabel.run(fadeInAction)
    self.musicBox()
}

func musicBox() {

    let body = SKSpriteNode(imageNamed: "musicBox")
    body.size = CGSize(width: 845.0, height: 379.0)
    body.position = CGPoint(x: 535, y: 454)

    let crank = SKSpriteNode(imageNamed: "crank")
    crank.size = CGSize(width: 155.0, height: 188.0)
    crank.position = CGPoint(x: 835.0, y: 480)
    crank.anchorPoint = CGPoint(x: 0.5 , y: 0.5-0.08)

    addChild(body)
    addChild(crank)

    print(point)

    crank.run(
        SKAction.repeatForever (
            SKAction.sequence([
                SKAction.wait(forDuration: 0.1),
                SKAction.run({

                    let angle = atan2(self.point.y - crank.position.y , self.point.x - crank.position.x)
                    let rotate = SKAction.rotate(toAngle: angle - CGFloat(M_PI_2), duration: 0.25)
                    crank.run(rotate)
                    if(!(crank.frame.contains(self.point))) {
                        self.removeAction(forKey: "New Thread")
                    }
                })
                ])
        ),
        withKey: "New Thread"
    )

} 

override public func mouseMoved(with event: NSEvent) {

    point = event.location(in: self)
    print(point)
}


}

//Delays Animations
func delay(_ delay:Double, closure:@escaping ()->()) {
    let when = DispatchTime.now() + delay
    DispatchQueue.main.asyncAfter(deadline: when, execute: closure)
}

let scene = Scene(size: CGSize(width: 1080, height: 1080))
scene.backgroundColor = #colorLiteral(red: 0.4078431373, green: 0.7843137255, blue: 0.6509803922, alpha: 1)
scene.scaleMode = .aspectFit

print(Thread.callStackSymbols)

let view = SKView(frame: NSRect(x: 0, y: 0, width: 1920, height: 1080))

PlaygroundPage.current.needsIndefiniteExecution = true
view.presentScene(scene)
PlaygroundPage.current.liveView = view

错误显示在此行:

let scene = Scene(size: CGSize.init(width: 1080, height: 1080))

错误似乎是由于我声明/使用 point var时引起的,但我不知道为什么会出现这种情况。

堆叠线程:

 Playground execution failed: error: MusicBox WWDC17.playground:10:44: error: cannot convert value of type 'SKView?' to expected argument type 'NSRect' (aka 'CGRect')
        let tracker = NSTrackingArea(rect: view, options: options, owner: self.view, userInfo: nil)
                                           ^~~~


* thread #1: tid = 0xb837, 0x0000000101cc9360 com.apple.dt.Xcode.PlaygroundStub-macosx`executePlayground, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1
  * frame #0: 0x0000000101cc9360 com.apple.dt.Xcode.PlaygroundStub-macosx`executePlayground
    frame #1: 0x0000000101cc722a com.apple.dt.Xcode.PlaygroundStub-macosx`-[PlaygroundViewBridgeService execute] + 90
    frame #2: 0x00007fff9ced43ec CoreFoundation`__invoking___ + 140
    frame #3: 0x00007fff9ced4271 CoreFoundation`-[NSInvocation invoke] + 289
    frame #4: 0x00007fff9ceed7a6 CoreFoundation`-[NSInvocation invokeWithTarget:] + 54
    frame #5: 0x00007fffb05d395b ViewBridge`__68-[NSVB_ViewServiceImplicitAnimationDecodingProxy forwardInvocation:]_block_invoke + 47
    frame #6: 0x00007fffb05f2f4c ViewBridge`__runAnimationGroup_block_invoke + 21
    frame #7: 0x00007fff9b350be2 AppKit`+[NSAnimationContext runAnimationGroup:] + 58
    frame #8: 0x00007fff9aa1e782 AppKit`+[NSAnimationContext runAnimationGroup:completionHandler:] + 85
    frame #9: 0x00007fffb05f2f28 ViewBridge`runAnimationGroup + 303
    frame #10: 0x00007fffb05d3462 ViewBridge`+[NSVB_View _animateWithAttributes:animations:completion:] + 507
    frame #11: 0x00007fffb05d38dd ViewBridge`-[NSVB_ViewServiceImplicitAnimationDecodingProxy forwardInvocation:] + 156
    frame #12: 0x00007fff9ced2daa CoreFoundation`___forwarding___ + 538
    frame #13: 0x00007fff9ced2b08 CoreFoundation`__forwarding_prep_0___ + 120
    frame #14: 0x00007fff9ced43ec CoreFoundation`__invoking___ + 140
    frame #15: 0x00007fff9ced4271 CoreFoundation`-[NSInvocation invoke] + 289
    frame #16: 0x00007fff9ceed7a6 CoreFoundation`-[NSInvocation invokeWithTarget:] + 54
    frame #17: 0x00007fffb05a135d ViewBridge`-[NSVB_QueueingProxy forwardInvocation:] + 327
    frame #18: 0x00007fff9ced2daa CoreFoundation`___forwarding___ + 538
    frame #19: 0x00007fff9ced2b08 CoreFoundation`__forwarding_prep_0___ + 120
    frame #20: 0x00007fff9ced43ec CoreFoundation`__invoking___ + 140
    frame #21: 0x00007fff9ced4271 CoreFoundation`-[NSInvocation invoke] + 289
    frame #22: 0x00007fff9ceed7a6 CoreFoundation`-[NSInvocation invokeWithTarget:] + 54
    frame #23: 0x00007fff9ced2daa CoreFoundation`___forwarding___ + 538
    frame #24: 0x00007fff9ced2b08 CoreFoundation`__forwarding_prep_0___ + 120
    frame #25: 0x00007fff9ced43ec CoreFoundation`__invoking___ + 140
    frame #26: 0x00007fff9ced4271 CoreFoundation`-[NSInvocation invoke] + 289
    frame #27: 0x00007fff9ceed7a6 CoreFoundation`-[NSInvocation invokeWithTarget:] + 54
    frame #28: 0x00007fff9ced2daa CoreFoundation`___forwarding___ + 538
    frame #29: 0x00007fff9ced2b08 CoreFoundation`__forwarding_prep_0___ + 120
    frame #30: 0x00007fff9ced43ec CoreFoundation`__invoking___ + 140
    frame #31: 0x00007fff9ced4271 CoreFoundation`-[NSInvocation invoke] + 289
    frame #32: 0x00007fffb05f752b ViewBridge`withHintInProgress + 487
    frame #33: 0x00007fffb05f725a ViewBridge`__deferNSXPCInvocationOntoMainThread_block_invoke_2 + 233
    frame #34: 0x00007fffb0578df2 ViewBridge`+[NSViewServiceApplication withHostPID:invoke:] + 46
    frame #35: 0x00007fffb05f711d ViewBridge`__deferNSXPCInvocationOntoMainThread_block_invoke + 179
    frame #36: 0x00007fffb05f6d0a ViewBridge`__deferBlockOntoMainThread_block_invoke_2 + 544
    frame #37: 0x00007fff9cef67dc CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK__ + 12
    frame #38: 0x00007fff9ced77e4 CoreFoundation`__CFRunLoopDoBlocks + 356
    frame #39: 0x00007fff9ced7326 CoreFoundation`__CFRunLoopRun + 1878
    frame #40: 0x00007fff9ced6974 CoreFoundation`CFRunLoopRunSpecific + 420
    frame #41: 0x00007fff9c462a5c HIToolbox`RunCurrentEventLoopInMode + 240
    frame #42: 0x00007fff9c462891 HIToolbox`ReceiveNextEventCommon + 432
    frame #43: 0x00007fff9c4626c6 HIToolbox`_BlockUntilNextEventMatchingListInModeWithFilter + 71
    frame #44: 0x00007fff9aa085b4 AppKit`_DPSNextEvent + 1120
    frame #45: 0x00007fff9b182d6b AppKit`-[NSApplication(NSEvent) _nextEventMatchingEventMask:untilDate:inMode:dequeue:] + 2789
    frame #46: 0x00007fffb057a06a ViewBridge`-[NSViewServiceApplication nextEventMatchingMask:untilDate:inMode:dequeue:] + 102
    frame #47: 0x00007fff9a9fcf35 AppKit`-[NSApplication run] + 926
    frame #48: 0x00007fff9a9c7850 AppKit`NSApplicationMain + 1237
    frame #49: 0x00007fffb26888c7 libxpc.dylib`_xpc_objc_main + 775
    frame #50: 0x00007fffb26872e4 libxpc.dylib`xpc_main + 494
    frame #51: 0x00007fffb05a57eb ViewBridge`-[NSXPCSharedListener resume] + 16
    frame #52: 0x00007fffb057eeb9 ViewBridge`NSViewServiceApplicationMain + 3022
    frame #53: 0x0000000101cc93a2 com.apple.dt.Xcode.PlaygroundStub-macosx`main + 34
    frame #54: 0x00007fffb2424255 libdyld.dylib`start + 1

2 个答案:

答案 0 :(得分:1)

我找到了解决方案。这一行:

let tracker = NSTrackingArea(rect: view, options: options, owner: self.view, userInfo: nil)

实际应该是:

let tracker = NSTrackingArea(rect: CGRect(x:0,y:0, width: 1080, height: 1080), options: options, owner: self.view, userInfo: nil)

我将rect分配给SKScene而不是CGRect;这样一个愚蠢的错误。

答案 1 :(得分:0)

当我在复制功能后错过了圆括号时,我也遇到了同样的错误。 如果我们在复制后错过()括号,则会在操场上给与相同的错误。 var samobj1 = samObj.copy()as!样本