gpt4 book ai didi

javascript - 将 NSDictionary 从 Javascript 传递到 JavascriptCore 中的 Objective-c

转载 作者:行者123 更新时间:2023-11-29 11:47:12 25 4
gpt4 key购买 nike

我在我的应用程序中使用 JavascriptCore。现在,我将一些变量传递给 JSContext,然后这些变量可以传递回 Objective-C。但是,其中一个变量 NSDictionary 没有正确传递。我运行下面的代码:

var evaluate = function(variables) {
app.setDictionary(variables.dictionary);
}

这是一个简单的示例,在 JSContext 中设置了以下这些方法。

这是 setDictionary() 方法:

- (void)setDicationary:(NSDictionary *)dictionary {
self.mutableDictionary = [dictionary mutableCopy];
}

这是variables.dictionary:

- (NSDictionary *)dictionary {
return self.values;
}

这就是我调用 evaluate() 的方式:

JSValue *jsFunction = self.context[@"evaluate"];
JSValue *value = [jsFunction callWithArguments:@[self.variables]];

但是,在 setDictionary 方法中,我没有得到 NSDictionary,而是得到了一个包含 [object Object] 的 NSString。

有什么办法可以解决这个问题吗?

最佳答案

尽管 JavaScriptCore 会自动在 Objective-C 或 Swift 与 JavaScript 之间进行类型转换,但我建议实现显式转换。自动转换并不总是像开发人员期望的那样工作。例如,当使用 NSString 时,undefined 被转换为 @"undefined"

尝试这样的事情:

- (void)setDicationary:(JSValue *)jsDictionary {
if ([jsDictionary isUndefined] || [jsDictionary isNull]) {
jsDictionary = nil;
}
self.mutableDictionary = [jsDictionary toDictionary];
}

请注意,JavaScript 使用对象作为字典,因此您应该非常小心传递给 Objective-C 代码的参数。传递任何系统对象将导致该对象递归转换为 NSDictionary

关于javascript - 将 NSDictionary 从 Javascript 传递到 JavascriptCore 中的 Objective-c,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43066204/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com