JavascriptCore 没有正确调用带有参数的函数

JavascriptCore isn't calling function with arguments properly

我制作了一个 iOS 应用程序来安装和 运行 javascript 脚本,为此,我正在使用 JavascriptCore。我的一些脚本是周期性的,这意味着它们每 X 秒启动一次。

伪代码示例:

every('X seconds', function(event) {
   save(event.timestamp);
});

到目前为止,一切都很好,直到我意识到几分钟后(~3 分钟)我调用的函数开始忽略我的参数。我在 save 方法中得到 "undefined" ! 它工作了一段时间然后...

Objective-c代码:

[_executionContext evaluateScript:[NSString stringWithFormat:@"var myFunc = %@", _script]];
[_executionContext[@"myFunc"] callWithArguments:@[event.data]];

说明

  1. 我评估 function(event) { ... } (script) 字符串并将其保存在 myFunc 对象中。
  2. 我用我的 event.data 调用这个函数,它公开了时间戳。简单!

请注意,即使 event.timestamp returns 未定义,我的 event.data 对象也不是 nil !而且我在我的 objective-c 代码中没有发现任何错误。我认为 callWithArguments 方法中发生了一些事情,或者我遗漏了一些东西...

数据接口:

@protocol DataExports<JSExport>
@property (nonatomic) long timestamp;
@end

@interface APSData : MTLModel<DataExports>
@end

我在设备和模拟器上遇到了同样的问题。

我做错了什么吗?

此致,

好的,我找到了解决方案!

我没有在每次事件发生时在我的函数上使用 evaluationScript,而是将它保存在地图中一次,然后我用它来调用我的函数。所以基本上:

[_executionContext evaluateScript:[NSString stringWithFormat:@"var %@ = %@", _functionHash, _script]];
_functionMap[_functionHash] = [_executionContext evaluateScript:_functionHash];

需要时,我会打电话给:

[_functionMap[_functionHash] callWithArguments:@[event.data]];

对我来说,这与我之前所做的没有什么不同,但似乎效果更好...

编辑:好吧……这真的行不通。现在它在 10 分钟后失败了..