【问题标题】:JavaScriptCore and Swift "this class is not key value coding-compliant for the key test"JavaScriptCore 和 Swift “此类不符合键值编码的键测试”
【发布时间】:2014-11-16 17:15:04
【问题描述】:

我一辈子都无法将字典(在本例中包含 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()])

【问题讨论】:

    标签: swift javascriptcore


    【解决方案1】:

    您使用了错误的方法。您想使用来自JSContextsetObject:forKeyedSubscript: 而不是来自NSKeyValueCoding 协议的setValuesForKeysWithDictionary:JSContext 不符合),即:

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

    【讨论】:

    • 哇,你是救生员。谢谢你。这种方法一定是我唯一没有尝试过的方法。
    猜你喜欢
    • 2016-09-10
    • 1970-01-01
    • 2019-06-23
    • 1970-01-01
    • 2017-11-29
    • 2017-10-15
    • 1970-01-01
    相关资源
    最近更新 更多