如何修复Xcode

时间:2015-09-27 17:36:56

标签: ios xcode swift debugging sprite-kit

我在Swift中有一个Sprite Kit游戏。 在我更新Xcode并打开我的项目之后,我注意到一些预先编码语法的变化和错误:“表达式的类型没有更多的上下文”这是以前没有的。 我在下面标记了错误代码。 Xcode也说.DataReadingMappedIfSafe出了问题。 你知道解决这个问题的方法吗? 提前谢谢!

import UIKit
import SpriteKit

extension SKNode {
  class func unarchiveFromFile(file : String) -> SKNode? {
    if let path = NSBundle.mainBundle().pathForResource(file, ofType: "sks") {

      // Error occurs on the following line:
      var sceneData = NSData(contentsOfFile: path, options: .DataReadingMappedIfSafe, error: nil)!

      var archiver = NSKeyedUnarchiver(forReadingWithData: sceneData)
      archiver.setClass(self.classForKeyedUnarchiver(), forClassName: "SKScene")
      let scene = archiver.decodeObjectForKey(NSKeyedArchiveRootObjectKey) as! GameScene
      archiver.finishDecoding()
      return scene
    } else {
      return nil
    }
  }
}

2 个答案:

答案 0 :(得分:4)

试试这个:

class func unarchiveFromFile(file : String) -> SKNode? {
    if let path = NSBundle.mainBundle().pathForResource(file, ofType: "sks") {

        var sceneData: NSData?
        // Error occurs on the following line:
        do {
            sceneData = try  NSData(contentsOfFile: path, options: .DataReadingMappedIfSafe)
        } catch _ as NSError {

        }

        var archiver = NSKeyedUnarchiver(forReadingWithData: sceneData!)
        archiver.setClass(self.classForKeyedUnarchiver(), forClassName: "SKScene")
        let scene = archiver.decodeObjectForKey(NSKeyedArchiveRootObjectKey) as! GameScene
        archiver.finishDecoding()
        return scene
    } else {
        return nil
    }
}

答案 1 :(得分:1)

您需要使用Swift 2中的try,请参阅 Swift 2 iBook.Swift 2.0声明为:convenience init(contentsOfFile path: String, encoding enc: UInt) throws,请注意throws到位错误参数。

  

错误处理

     

错误处理是响应程序中的错误条件并从中恢复的过程。 Swift为在运行时抛出,捕获,传播和操纵可恢复的错误提供了一流的支持。“

你可以从书中了解更多关于Swift中的错误处理:“将Swift与Cocoa和Objective-C一起使用(Swift 2.1)。”iBooks。 https://itun.es/de/1u3-0.l

但无论如何,忽略错误并不是最佳做法。