JavaScriptCore和Swift“这个类不是密钥值编码兼容的关键测试”

时间:2014-11-16 17:15:05

标签: swift javascriptcore

我不能为我的生活传递一个字典(在这种情况下包含一个SKLabelNode)或任何其他对象到Swift中的JavaScriptCore。我直接从我刚刚在Xcode中创建的“命令行工具”模板项目中获取了这个简短的示例。

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.'

我在Yosemite上使用Xcode 6.1。任何人都可以重现我的问题并解决它吗?

更新:

我认为也许它没有用,因为我没有“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()])

1 个答案:

答案 0 :(得分:0)

您使用了错误的方法。您希望使用setObject:forKeyedSubscript:中的JSContext而不是setValuesForKeysWithDictionary:协议NSKeyValueCoding不符合JSContext的{​​{1}},即:

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