0

您可能会想:“关于此错误的另一篇文章”。是的,在写这个问题之前我一直在研究这个论坛,不幸的是我找不到可以帮助的东西,或者至少我知道当有一个未绑定的 var 时这个错误就会出现。

但是,由于我对此很陌生,因此我需要一些帮助。我正在按照指南制作一个简单的无限横向卷轴游戏。到目前为止一切顺利,但后来我遇到了这个“零”错误。指南本身没有此错误。

所以我觉得可能是我使用了更新版本的 xCode 或 iphone 模拟。但我很确定它与此无关。

到目前为止我的编码:

import Foundation

class MainScene: CCNode {
    weak var hero: CCSprite!

    func didLoadFromCCB() {
       userInteractionEnabled = true
    }

    override func touchesBegan(touch: CCTouch!, withEvent event: CCTouchEvent!) {
       // This is the error line. I think it is caused by (applyImpulse(ccp(0, 400)) )
        hero.physicsBody.applyImpulse(ccp(0, 400)) 
    }
}

我怎样才能简单地解决这个问题?我应该用 applyImpulse 做一个变量吗?我还尝试在 CGPoint (ccp) 和 CCPackage 之间切换,但均无效。

4

2 回答 2

3
  weak var hero: CCSprite!

这是非常危险的,很可能是您的问题的原因。除了使用!几乎总是要避免的 . 之外,它还与weak. 这意味着如果其他东西停止指向hero这个变量就会变成一个隐式展开的nil。下次访问它时,您会崩溃。

首先,摆脱!. 如果需要weak,请使用?. 除此之外,决定它是否真的很强大。您在此处显示的任何内容都表明它应该很弱。

于 2015-12-01T18:11:46.943 回答
0

我认为上面的错误代码会给新手带来很多困惑,因为我们不知道 swift 2.0 和旧版本的 swift 中什么是“可选”的。例如,我遇到了同样的错误,无法判断问题出在哪里。我发现我正在使用括号 () 调用一个方法,并且在同一个函数中我调用了没有括号的方法。这导致了上面的错误。 () 是一个可选组件,按照我的理解,它在 Swift 2.0 中变得可选。调用方法时必须保持一致,否则编译器将抛出“在展开可选值时发现 nil 错误”。这是我的代码:我调用不一致的方法是 NSDirectoryEnnumerationOptions()。这在我分享的示例中得到了纠正:

      func listFilesWithFilter() -> [String]
{
NSFileManager().URLForDirectory(.DocumentDirectory, inDomain: .UserDomainMask, appropriateForURL: nil, create: true)
    let musicUrl = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask).first!
    do{
        let fileList = try NSFileManager.defaultManager().contentsOfDirectoryAtURL(musicUrl,includingPropertiesForKeys: nil, options: NSDirectoryEnumerationOptions())
        print(fileList)
    } catch let error as NSError {
        print(error.localizedDescription)
    }
    // filter for wav files 
    do {
        let directoryUrls = try NSFileManager.defaultManager().contentsOfDirectoryAtURL(musicUrl, includingPropertiesForKeys: nil, options: NSDirectoryEnumerationOptions())
        print(directoryUrls)
        let wavFiles = directoryUrls.filter(){ $0.pathExtension == "wav"}.map{ $0.lastPathComponent}
        print ("WavFiles:\n" + wavFiles.description)
    } catch let error as NSError {
        print(error.localizedDescription)
    }
    return wavFiles
    }  
于 2015-12-01T21:40:26.787 回答