当UITableView中没有显示任何内容时,我正在使用DZNEmptySet加载。它适用于DZNEmptySet的方法,如titleForEmptyDataSet
,imageForEmptyDataSet
,但不适用于我想要使用的方法(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,我调查了我遇到的递归并发现了问题的根源。
您没有在xib的视图上指定UIView类。而是单击标题为文件所有者的黄色多维数据集并在其中指定UIView
,将类字段留空,在文档大纲面板中的视图上。
在清理缓存和重建之后,我可以使用在MyViewController
上调用此代码的方式在层次结构中加载视图:
func customViewForEmptyDataSet(scrollView: UIScrollView!) -> UIView! {
let emptySetView = EmptySetView(frame: scrollView.frame)
return emptySetView
}
在加载xib之前,EmptySetView
xib和MyViewController
彼此不了解,因此您需要处理布局约束。
答案 0 :(得分:1)
我的猜测是,在nib中加载顶级视图本身就是一个EmptySetView。这导致递归。首先在代码中实例化EmptySetView:
override init(frame: CGRect) {
super.init(frame: frame)
setup()
}
在setup()
中,您加载笔尖。但是这会导致从NIB再次实例化的 EmptySetView。这次,另一个初始化程序被称为:
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
setup()
}
但是setup()
加载了笔尖,所以我们现在绕圈子,试图将无数个加载笔尖的视图嵌入到彼此中,就像matrushka娃娃一样。