2014-11-16 38 views
0

我不能爲我的生活傳遞一個字典(在這種情況下包含SKLabelNode)或任何其他對象在Swift中JavaScriptCore。我將這個簡短的示例直接從我剛剛在Xcode中創建的「命令行工具」模板項目中提取出來。JavaScriptCore和Swift「這個類不是關鍵值編碼兼容的關鍵測試」

import Foundation 
import JavaScriptCore 
import SpriteKit 

let context = JSContext() 
let label = SKLabelNode(text:"Test") 
context.setValuesForKeysWithDictionary(["test": label]) 

這引發了我的異常:

2014-11-16 18:07:47.104 JSCoreTest[10139:193484] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<JSContext 0x1008268d0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key test.' 

我使用的Xcode 6.1優勝美地。任何人都可以重現我的問題並解決它?

UPDATE:

我想也許它沒有工作,因爲我沒有「JSExport」的對象,所以我試圖用這個例子,但我仍然得到同樣的錯誤:

protocol MyObjExport: JSExport { 
    var foo: String! { get } 
} 

class MyObj: NSObject, MyObjExport { 
    var foo: String! { return "bar" } 
} 


let context = JSContext(virtualMachine: JSVirtualMachine()) 
context.setValuesForKeysWithDictionary(["test": MyObj()]) 

回答

0

您正在使用錯誤的方法。你想用從JSContextsetObject:forKeyedSubscript:而不是setValuesForKeysWithDictionary:NSKeyValueCoding協議(這JSContext不符合),即:

let context = JSContext() 
let label = SKLabelNode(text:"Test") 
context.setObject(label, forKeyedSubscript: "test") 
+0

哇,你是一個生命的救星。謝謝。這種方法肯定是我沒有嘗試過的唯一方法。 – Rhuantavan

相關問題