Ich wollte eine separate Datenquellenklasse für UIPickerView wie diese erstellen:Benutzerdefinierte Datenquellenklasse für UIPickerView in Swift
class PickerData : NSObject, UIPickerViewDataSource {
// class definition goes here
var pickerDataSource = ["White", "Red", "Green", "Blue"];
func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
return 1
}
func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return pickerDataSource.count;
}
func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! {
return pickerDataSource[row]
}
}
Wenn ich versuche, es zu benutzen, ich Thread 1: EXC_BAD_ACCESS (code=1, address=0x0)
func createPickerView() -> UIView {
var picker = UIPickerView(frame:CGRectMake(20, 20, 480, 20))
picker.dataSource = PickerData();
picker.delegate = self;
var newView = UIView();
newView.setTranslatesAutoresizingMaskIntoConstraints(false);
newView.backgroundColor = UIColor.whiteColor();
newView.addSubview(picker)
self.view.addSubview(newView) // <-- ERROR HERE
return newView;
}
jedoch wenn ich die data~~POS=TRUNC zu Selbst ändern behebt es das Problem:
picker.dataSource = self;
// and add the functions numberOfComponentsInPickerView etc to the
// main controller it works
Aber ich würde nicht gerne self
verwenden, weil das den Code auf nur eine UIPickerView auf einer Seite beschränkt. Vielleicht ist das nicht so schlimm, aber es fühlt sich ein bisschen traurig an.
Aha, geht die Datenquelle Variable Referenzzähler auf Null, nachdem die Funktion beendet wird, so muss es eingestellt werden, eine Membervariable des View-Controllers sein oder etwas ähnliches . –