2015-11-18 107 views
-1
class func unarchiveFromFile(file : NSString) -> SKNode? { 

    let path = NSBundle.mainBundle().pathForResource(file as String, ofType: "sks") 

    var sceneData = NSData.dataWithContentsOfFile(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 

所以我得到的VAR sceneData = NSData的說了一個錯誤:表達式的類型是不明確的更多的內容。我很困難型表達的不明確沒有更多的情況下

回答

0

pathForResource返回一個可選項。
dataWithContentsOfFile預計是非可選的。

展開可選

let path = NSBundle.mainBundle().pathForResource(file as String, ofType: "sks")! 

還是可選的結合

if let path = NSBundle.mainBundle().pathForResource(file as String, ofType: "sks") { 
// path is safe 
} 

事實上的dataWithContentsOfFile正確的語法是

let sceneData = NSData(contentsOfFile:path, options: .DataReadingMappedIfSafe, error: nil) 

.DataReadingMappedIfSafe永遠需要被解開。

編輯:

的完整代碼:

class func unarchiveFromFile(file : NSString) -> SKNode? { 

    if let path = NSBundle.mainBundle().pathForResource(file as String, ofType: "sks") { 
     // path is safe 
     let 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 
    } 
    return nil 
} 
+0

你好, 所以我沒有進行更改,並使其 如果讓PATH = NSBundle.mainBundle()pathForResource(文件作爲字符串,ofType。 :「SKS」){// 路徑是安全 } 但現在它給我用懸而未決的標識符「路徑」 也與第一選項,錯誤仍然 感謝您的幫助:) – Domo

+0

您必須將其餘的代碼放到* path安全*範圍內。而且我懷疑還有另一個問題,當'SKNode'被預期時會返回'GameScene'。 – vadian

+0

'讓sceneData = NSData的(contentsOfFile:路徑,選擇:.DataReadingMappedIfSafe,誤差:無) VAR歸檔= NSKeyedUnarchiver(forReadingWithData:sceneData) archiver.setClass(s​​elf.classForKeyedUnarchiver(),forClassName: 「SKScene」) 設現場= archiver.decodeObjectForKey(NSKeyedArchiveRootObjectKey)作爲GameScene archiver.finishDecoding() 返回現場 }' 這是我的全部代碼,我是很新的快捷,我不知道在所有的如何解決它。我花了很長時間嘗試 – Domo

相關問題