我已经制作了一个iOS应用程序来安装&运行javascript脚本并执行此操作,我使用的是JavascriptCore。我的一些脚本是周期性的,这意味着它们每隔X秒启动一次。
伪代码示例:
every('X seconds', function(event) {
save(event.timestamp);
});
到目前为止,一切都很好,直到我意识到几分钟后(约3分钟)我调用的函数开始忽略我的论点。我得到了#34;未定义"在我的save
方法中! 它已经工作了一段时间然后 ......
Objective-c代码:
[_executionContext evaluateScript:[NSString stringWithFormat:@"var myFunc = %@", _script]];
[_executionContext[@"myFunc"] callWithArguments:@[event.data]];
解释
function(event) { ... }
(script
)字符串并将其保存在myFunc
对象中。event.data
调用此函数来公开时间戳。简单!请注意,即使event.timestamp
返回未定义,我的event.data
对象也不是!我在Objective-c代码中发现没有错。我认为callWithArguments方法中发生了一些事情,或者我错过了一些东西......
数据界面:
@protocol DataExports<JSExport>
@property (nonatomic) long timestamp;
@end
@interface APSData : MTLModel<DataExports>
@end
我在设备和模拟器上遇到同样的问题。
我做错了吗?
此致
答案 0 :(得分:0)
好的,我找到了解决方案!
每次我的事件发生时,我都不会在我的函数上使用evaluationScript
,而是在地图中保存一次,然后用它来调用我的函数。所以基本上:
[_executionContext evaluateScript:[NSString stringWithFormat:@"var %@ = %@", _functionHash, _script]];
_functionMap[_functionHash] = [_executionContext evaluateScript:_functionHash];
如果需要,我打电话:
[_functionMap[_functionHash] callWithArguments:@[event.data]];
对我而言,我之前所做的并没有什么不同,但似乎效果更好......
编辑:嗯......它确实不起作用。现在它在10分钟后失败了..