Во-первых, у меня есть структура. Это моя модельПочему моя модель не обновляется?
struct DiscoverySettings {
var alert:Bool
var distance:Int
var minAge: Int
var maxAge: Int
private init(){
alert = true
distance = 50
minAge = 18
maxAge = 100
}
}
extension UIViewController{
var contentViewController: UIViewController{
if let navcon = self as? UINavigationController{
return navcon.visibleViewController
}else{
return self
}
}
}
// View Controller 1
class SettingsViewController: UIViewController {
let discovery_model = DiscoverySettings()
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == Constants.EditDiscoverSegue {
if let dseg = segue.destinationViewController.contentViewController as? DiscoverySettingsViewController {
dseg.dsettings = discovery_model
}
}
}
@IBAction func unwindToSettings(segue:UIStoryboardSegue){
println(discovery_model.minAge)
println(discovery_model.maxAge)
}
...
//View Controller 2
class DiscoverySettingsViewController: UIViewController {
var dsettings: DiscoverySettings? {
didSet{
render()
}
}
func rangeSliderValueChanged(rangeSlider: RangeSlider) {
println("Range slider value changed: (\(Int(rangeSlider.lowerValue)) , \(Int(rangeSlider.upperValue)))")
var low = Int(rangeSlider.lowerValue)
var high = Int(rangeSlider.upperValue)
dsettings?.minAge = low //this does not set the original model!
dsettings?.maxAge = high //this does not set the original model!
}
...
Когда я тащу свой ползунок, а затем нажмите кнопку «Сохранить», чтобы расслабиться в Segue происхождения, я распечатать максимальный возраст и возраст мин. Однако они печатают 18 и 100. Они не печатают значение, которое я изменил в своем слайдере. (Тем не менее, все операторы печати работают, поэтому слайдер работает нормально).
Примечание: если вам нужно использовать структуры, вам придется передавать новые значения через закрытие обратного вызова, чтобы контроллер мог назначить (следовательно, скопировать) отредактированную модель в свою собственную копию. –
Я переключил его на «класс», но он все еще отображает начальное значение. Я также переключил «let» на «var» при создании модели. – TIMEX
Если точка останова при двух назначениях, 'dsettings' nil? –