Ich verwende DZNEmptySet, um zu laden, wenn in einem UITableView nichts angezeigt werden soll. Es funktioniert gut für DZNEmptySet Methoden wie titleForEmptyDataSet
, imageForEmptyDataSet
, aber nicht die, die ich verwenden möchte (das ist customViewForEmptyDataSet
).Initialisierung einer XIB in der Unteransicht eines UIViewControllers
Wenn ich versuche, die Xib in die scrollView.frame
zu laden, beginnt Xcode Speicher in 30 Megabyte-Schritten aufgebläht und die App hängt. Ich weiß, ich bin schuld, aber ich weiß nicht, was ich vermasselt habe.
Ich habe mir viele Antworten hier und Tutorials auf anderen Seiten angesehen, aber ich kann keine Lösung finden, die für diesen Umstand funktioniert (was ich denke, ist ziemlich einfach). Jede Rückmeldung an dieser Front würde sehr geschätzt werden.
Hier customViewForEmptyDataSet
auf MyViewController
// App hangs on this and memory bloats in 30 megabyte increments.
func customViewForEmptyDataSet(scrollView: UIScrollView!) -> UIView! {
return EmptySetView(frame: scrollView.frame)
}
Hier ist die Klasse für meine EmptySetView
, dass ich zu initialisieren bin versucht:
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
}
}
aktualisieren
Bei Matt's suggestion untersuchte ich Rekursion I erlebt und entdeckt die Ursache des Problems.
Sie geben die UIView-Klasse nicht für View für Ihre Xib an. Stattdessen klicken Sie auf den gelben Cube mit dem Titel File's Owner und geben Sie UIView
dort, das Klassenfeld leer in der Ansicht in der Dokumentgliederung Feld verlassen.
Nach Caches Reinigung und Wiederaufbau, kann ich die Ansichten in der Hierarchie mit diesem Code auf MyViewController
genannt zu laden:
func customViewForEmptyDataSet(scrollView: UIScrollView!) -> UIView! {
let emptySetView = EmptySetView(frame: scrollView.frame)
return emptySetView
}
Die EmptySetView
xib und MyViewController
wissen nicht, über die jeweils Andere, bis die Xib geladen ist, müssen Sie mit Layout-Einschränkungen umgehen.
von wo aus rufen Sie 'customViewForEmptyDataSet' – Miknash
Verwenden Sie Instrumente. Es zeigt Ihnen sofort, was die Ursache des Problems ist. Sie können beobachten, wie der Speicher wächst, und die Aufrufkette anzeigen, die ihn verursacht. – matt
@NickCatib 'customViewForEmptyDataSet' ist eine Delegate-Methode, die aufgerufen wird, wenn' tableView' leer ist. – Adrian