当UITableView中没有显示内容时,我正在使用DZNEmptySet加载。对于DZNEmptySet的方法(例如titleForEmptyDataSetimageForEmptyDataSet),它可以正常工作,但不适用于我要使用的方法(即customViewForEmptyDataSet)。

当我尝试将xib加载到scrollView.frame中时,Xcode的内存开始以30兆字节的增量膨胀,并且该应用程序挂起。我知道我有错,但我不知道自己在搞什么。

我在这里查看了许多答案以及其他网站上的教程,但找不到适合这种情况的解决方案(我认为这很简单)。在这方面的任何反馈将不胜感激。

这是customViewForEmptyDataSet上的MyViewController

// App hangs on this and memory bloats in 30 megabyte increments.
func customViewForEmptyDataSet(scrollView: UIScrollView!) -> UIView! {
    return EmptySetView(frame: scrollView.frame)
}

这是我要初始化的EmptySetView的类:
import UIKit

class EmptySetView: UIView {
    var view: UIView!
    // These are connected to a xib
    @IBOutlet weak var backgroundImageView: UIImageView!
    @IBOutlet weak var viewLabel: UILabel!
    @IBOutlet weak var viewTextView: UITextView!

    override init(frame: CGRect) {
        super.init(frame: frame)
        setup()
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        setup()
    }

    func setup() {
        view = loadViewFromNib()
        view.frame = bounds
        view.autoresizingMask = [.FlexibleWidth, .FlexibleHeight]
        self.addSubview(self.view)
    }

    func loadViewFromNib() -> UIView {
        let bundle = NSBundle(forClass:self.dynamicType)
        let nib = UINib(nibName: "EmptySetView", bundle: bundle)
        let view = nib.instantiateWithOwner(self, options: nil)[0] as! UIView

        return view
    }
}

更新

Matt's suggestion,我调查了所遇到的递归并发现了问题的根源。

您没有在ibt的视图上指定UIView类。而是单击标题为文件的所有者的黄色多维数据集,然后在其中指定UIView,在“文档大纲”面板中的视图上将类字段保留为空。

ios - 在UIViewController的 subview 上初始化Xib-LMLPHP

清除缓存并重建后,我可以使用MyViewController上的以下代码将视图加载到层次结构中:
func customViewForEmptyDataSet(scrollView: UIScrollView!) -> UIView! {
    let emptySetView = EmptySetView(frame: scrollView.frame)
    return emptySetView
}

在加载xib之前,EmptySetView xib和MyViewController彼此不了解,因此您需要处理布局约束。

最佳答案

我的猜测是,在笔尖中,您正在加载顶级视图本身就是EmptySetView。这导致递归。您首先在代码中实例化EmptySetView:

override init(frame: CGRect) {
    super.init(frame: frame)
    setup()
}

setup()中,加载笔尖。但这会导致从笔尖再次实例化EmptySetView。这次,另一个初始化器称为:
required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    setup()
}

但是setup()加载了笔尖,因此我们现在绕圈走动,尝试将无数笔尖加载的视图像matrushka娃娃一样相互嵌套。

关于ios - 在UIViewController的 subview 上初始化Xib,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38506162/

10-11 19:54