(请原谅文字数量)
我试图在应用中渲染一堆数学问题。说出30个问题,每个问题大约有7到8个字段(说明,问题,答案选择和评论)。
当我使用MathJax渲染将它们加载到容器中时,我能够成功地完成此操作(我还在JS中使用回调来确保在查看之前加载内容)。
事实是,这个过程每次都需要几秒钟,我想预先加载整组问题和视图,以便在初始加载后,问题加载将是即时的。我认为使用集合是最好的方法,而且我一直尝试两种没有运气的方法:
加载包含所有内容作为单元格/项目的集合,然后跳转到单元格(我面临的问题是只有被查看的单元格会加载,然后我想他们是否全部加载,我会面对我现在面临的问题是下一个选项)
将所有内容加载到不可见的子视图中,然后在选择子视图时将其加载到单元格中(可以提供对事物加载方式的更多控制)
在任何一种情况下,我遇到了同样的问题(这甚至发生在最初一个一个加载多个容器,如果我跳得太快,应用程序会崩溃)。
我认为一个可能的解决方案是确保加载视图的循环在Mathjax完成渲染之前不会重新循环,但是无法找到使循环等待的方法(一旦启动加载它继续递增) 。
希望有人可以提供一个好主意:
或
如何在重新循环之前专门让循环等待视图呈现(我有一个进程可以识别Mathjax完全呈现的时间,但我无法弄清楚如何使循环等待这个过程目前用于在视图完成后取消隐藏视图。
for var i = 0; i < objectsKeyValues.count; i++ {
let iInput:String = cDParentVC.string1 + cDContentAbstraction.objectsKeyValues[i]["instructions"]! + cDParentVC.string2
let qInput:String = cDParentVC.string1 + cDContentAbstraction.objectsKeyValues[i]["question"]! + cDParentVC.string2
... for a few more of these
let iView = WKWebView.init(frame: CGRectMake(5,5,300,35), configuration: config)
...same
iView.loadHTMLString(iInput, baseURL: NSBundle.mainBundle().bundleURL)
..same
viewDictArray.append(["iView":iView,"qView":qView,"a1View":a1View,"a2View":a2View,"a3View":a3View,"a4View":a4View,"a5View":a5View,"rView":rView,"pView":pView])
cDLargeContent.invisiView.addSubview(viewDictArray[i]["iView"]!)
...same
}
我怀疑NSOperations或GCD也可以提供必要的控制,但我对编程非常环保,并且无法成功实现这些概念,更不用说验证它们是否可以解决这个问题。