Сбой при передаче объектов Swift в JavaScript

Я пытаюсь использовать класс 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, MyObjExport
{
    public var foo: String! { return "bar" }
}

Который производит следующее "MyModule-Swift.h"заголовок:

SWIFT_PROTOCOL("MyObjExport")
@protocol MyObjExport <JSExport>
@property (nonatomic, readonly, copy) NSString * foo;
@end

SWIFT_CLASS("MyObj")
@interface MyObj : NSObject <MyObjExport>
@property (nonatomic, readonly, copy) NSString * foo;
@end

Я могу прекрасно создать и использовать этот объект из другого кода Obj-C, но:

MyObj *foo = [[MyObj alloc] init];

[JSValue valueWithObject:foo inContext:nil]; // EXC_BAD_ACCESS

Сбои в реализации Aore:

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

(В консоль ничего не записывается.) Если я реализую класс в Obj-C вместо Swift, он будет работать нормально. Что не так и как я могу это исправить?

1 ответ

Конечно, вы не хотите, чтобы JSContext, который вы передаете, создавая JSValue, был равен нулю?

Я попытался с ненулевым контекстом, и я могу успешно создать экземпляр JSValue, с нулевым контекстом он падает с EXC_BAD_ACCESS.

Это будет работать:

JSContext *context = [[JSContext alloc] init];
MyObj *foo = [[MyObj alloc] init];
[JSValue valueWithObject:foo inContext:context];
Другие вопросы по тегам