Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 将Swift对象传递到JavaScript时崩溃_Objective C_Swift_Javascriptcore - Fatal编程技术网

Objective c 将Swift对象传递到JavaScript时崩溃

Objective c 将Swift对象传递到JavaScript时崩溃,objective-c,swift,javascriptcore,Objective C,Swift,Javascriptcore,我正试着用一门快速的课。这就是我所拥有的: import JavaScriptCore @objc(MyObjExport) // explicit name required for class_copyProtocolList to work public protocol MyObjExport: JSExport { var foo: String! { get } } @objc(MyObj) public class MyObj: NSObject, MyObjExpor

我正试着用一门快速的课。这就是我所拥有的:

import JavaScriptCore

@objc(MyObjExport) // explicit name required for class_copyProtocolList to work
public protocol MyObjExport: JSExport {
    var foo: String! { get }
}

@objc(MyObj)
public class MyObj: NSObject, MyObjExport
{
    public var foo: String! { return "bar" }
}
这将生成以下“
MyModule Swift.h
”标题:

它在JSCore实现中崩溃:

#0  0x00007fff87c5ca73 in objectToValueWithoutCopy(JSContext*, objc_object*) ()
#1  0x00007fff87c5c27e in objectToValue(JSContext*, objc_object*) ()
#2  0x00007fff87c5c20c in +[JSValue valueWithObject:inContext:] ()

(控制台上没有记录任何内容。)如果我在Obj-C中而不是在Swift中实现该类,它工作正常。出了什么问题,我该如何解决这个问题?

您肯定不希望通过创建JSValue传递的JSContext为零

我尝试使用非nil上下文,并且我可以成功地实例化JSValue,使用nil上下文,它会因EXC_BAD_访问而崩溃

这将有助于:

JSContext *context = [[JSContext alloc] init];
MyObj *foo = [[MyObj alloc] init];
[JSValue valueWithObject:foo inContext:context];
#0  0x00007fff87c5ca73 in objectToValueWithoutCopy(JSContext*, objc_object*) ()
#1  0x00007fff87c5c27e in objectToValue(JSContext*, objc_object*) ()
#2  0x00007fff87c5c20c in +[JSValue valueWithObject:inContext:] ()
JSContext *context = [[JSContext alloc] init];
MyObj *foo = [[MyObj alloc] init];
[JSValue valueWithObject:foo inContext:context];