2015-04-05 55 views
0

我有一個類:如何設置我的UISlider和UISwitch的初始值?

class DiscoverySettings { 
    var alert:Bool 
    var distance:Int 
    var minAge: Int 
    var maxAge: Int 
    private init(){ 
     alert = true 
     distance = 50 
     minAge = 18 
     maxAge = 25 
    } 
} 

在另一個控制器,我這樣做:

var 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 
      } 
     } 
    } 

這是我做我的updateUI()初始設置:

@IBOutlet weak var distanceSlider: UISlider! 
@IBOutlet weak var alertSwitch: UISwitch! 

var dsettings: DiscoverySettings? { 
    didSet{ 
     updateUI() 
    } 
} 

let ageSlider = RangeSlider(frame: CGRectZero) 

override func viewDidLoad() { 
    super.viewDidLoad() 
} 

func updateUI(){ 
    self.distanceSlider.value = Float(dsettings?.distance) //error 
    self.alertSwitch = dsettings?.alert //error 
} 

我在設置這些值的行上出現諸如「無法找到接受提供參數的init的重載」和「無法找到超載NSNumber不是UISwitch的子類型」的錯誤。

我不確定爲什麼會出現這些錯誤,因爲我在類中定義了類型。

回答

2

試試下面的代碼:

func updateUI(){ 
    if let dsettings = dsettings { 
     self.distanceSlider?.value = Float(dsettings.distance) 
     self.alertSwitch?.on = dsettings.alert 
    } 
} 
+0

仍然收到相同的錯誤 – TIMEX 2015-04-05 16:22:51

+0

您在哪一行收到錯誤? – Abdullah 2015-04-05 16:25:12

+0

這兩行我設置的值。 – TIMEX 2015-04-05 16:26:11

0

我看到兩個問題,你給出的代碼:

1:在prepareForSegue,當你設置contentViewController的設置屬性時,賽格瑞的目的地視圖控制器的看法尚未加載,您在didSet上調用updateUI。這是你錯誤的原因:

"fatal error: unexpectedly found nil while unwrapping an Optional value"

因爲意見仍然無在這一點上,你會自動展開的屬性定義可選的,因爲你用「!」。

你應該調用轉到updateUI()移動到viewDidLoad中或你必須檢查的意見已經創建

2.A:你需要做的,「如果讓DSETTINGS」的原因是,浮動()不要接受一個可選的使用,如果讓讓它在如果範圍dsettings不再是可選的。