2014-11-16 36 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

相关问题