objective-c - 将 Swift 对象传递给 JavaScript 时崩溃

标签 objective-c swift javascriptcore

我正在尝试将 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” header :

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

它在 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 吗?

我尝试使用非 nil 上下文,我可以成功实例化一个 JSValue,使用 nil 上下文它会因 EXC_BAD_ACCESS 而崩溃。

这会起作用:

JSContext *context = [[JSContext alloc] init];
MyObj *foo = [[MyObj alloc] init];
[JSValue valueWithObject:foo inContext:context];

关于objective-c - 将 Swift 对象传递给 JavaScript 时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24973911/

相关文章:

JavaScript nasted 默认参数

ios - 在“id<NSCopy>”类型的对象上找不到读取字典元素的预期方法

ios - 使用 UILabel 删除截头上的 3 个点

ios - fatal error : Invalid state: A login callback was received, 但未发送登录请求

uitableview - 动态地将自定义对象数组排序到部分 UITableview

swift - WebView.stringByEvaluatingJavaScriptFromString 解析错误

objective-c - UITableView 滚动时中断?

iphone - 对数组进行排序时忽略某些字符串

Swift 相当于 Ruby 的 "Pathname.relative_path_from"

JavascriptCore 不从类中导出方法