在Swift Playgrounds中,浏览次数有限。

4
在创建一个旨在用于iPad应用的新的Swift Playground / .playgroundbook时,我经常会收到错误消息:“运行播放时出现问题。 在运行此播放时遇到了问题。 检查您的代码是否有错误。” 我发现这个问题是由于向我的实时视图(live view)添加某些子视图时引起的。更具体地说,我的目标是将UIImage分成多个部分并为它们创建新的UIImageViews:
for x in 0..<parts {
    for y in 0..<parts {
        //Create UIImageView with cropped image
        let pieceView = UIImageView.init(frame: CGRect.init(x: CGFloat(x)*singleSize.width, y:CGFloat(y)*singleSize.height, width: singleSize.width, height: singleSize.height))
        let imageRef = image.cgImage!.cropping(to: CGRect.init(x:0, y:0, width: 100, height: 100));
        pieceView.image = UIImage.init(cgImage: imageRef!)
        //Add them to an array
        self.viewArray.append(pieceView)
    }
}

这就是对我来说变得非常棘手的地方:现在添加7个UIImageView没有任何问题,但是一旦我想添加8个或更多的视图,游乐场就会停止工作并显示错误消息“Problem running playground…”(见上文)

到目前为止,我测试过以下内容:

  • 使用相同图像添加UIImageView不会引起此问题
  • 在后台线程中裁剪UIImage并在主线程上添加视图也没有帮助
  • 创建UIImageView而不将其添加到实时视图中不会造成任何问题
  • 代码在mac游乐场上执行时完全正常,无论要添加多少视图

遇到了相同的问题!请让我知道您是否找到了明确的解决方案。 - Cesare
问题还没有解决。作为一种解决方法,我切换到了SpriteKit,在那里我使用想要使用的图像初始化SKNodes。这样,我可以添加任意数量的图像... - jraufeisen
聪明!感谢您的更新。 - Cesare
3个回答

9

在添加多个UI元素时,我遇到了这种iPad Swift Playground运行时错误。

这个问题是由Playground属性中“启用结果(Enable Results)”的默认设置引起的,该设置被设定为ON。 “启用结果”预览所有内联对象结果的查看器。当你生成许多UI元素时,它会导致Swift Playgroud崩溃。

尝试禁用“启用结果”即可解决此问题。这对我有用。 Swift Playground: Turn off for Enable Results


如果您正在尝试在playgrounds中编写SwiftUI代码,请使用以下“技巧”来运行SwiftUI。在我关闭“启用结果”之前,我无法呈现具有超过2个选项卡项的Tabview。通过在Xcode中重新创建并选择“缓慢步进”,我验证了我的代码是否有效。我的一些视图被渲染了4次,但最终在5分钟后工作了。关闭“启用结果”,视图将立即呈现。 - mushcraft

0

我看到了一个类似的问题,问题在于只是错误地使用了nil。
为了获得清晰的错误信息,只需创建一个与相同文件的playground,并在mac上运行它:这样您可以获得更详细的信息,找到更容易解决您的问题。

如果您遇到任何困难,请告诉我 :)


0

可能有点晚了,但我上周也遇到了同样的问题...今天终于想出了解决方法:

我正在运行一段代码,在其中添加了一个背景视图,如下所示:

func createView(){
    // gray background
    let marco = CGRect(x:0, y: 0, width: 603, height: 825)
    vista = UIView(frame: marco)
    vista.backgroundColor = UIColor.gray
    vista.isUserInteractionEnabled = true
    vista.tag = 5
    PlaygroundPage.current.liveView = vista
    PlaygroundPage.current.needsIndefiniteExecution = true
}

但我将其放在代码开头

我所改变的是:

PlaygroundPage.current.liveView = vista
PlaygroundPage.current.needsIndefiniteExecution = true

将其放置在所有代码的末尾,在开始运行程序之前...如果您需要更多细节,请告诉我,我可以分享更多信息。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接