[英]Swift property nil outside unwindToViewController
為了在視圖之間傳遞數據,我決定使用一個“臨時”對象作為我的視圖的數據模型。
var tempMedecine = TempMedecine()
var xValue = 0
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if let dmController = segue.destinationViewController as? JRBDosageMainTableViewController {
dmController.tempMedecine = self.tempMedecine
}
}
@IBAction func unwindToViewController(segue: UIStoryboardSegue) {
if let dosageController = segue.sourceViewController as? JRBDosageMainTableViewController {
self.tempMedecine = dosageController.tempMedecine!
self.xValue = 10
let dosageCell = tableView.cellForRowAtIndexPath(NSIndexPath(forRow: 1, inSection: 0))
dosageCell?.detailTextLabel?.text = String(self.tempMedecine.dosageQuantity!) + " " + self.tempMedecine.dosageQuantityType!
}
}
override func shouldPerformSegueWithIdentifier(identifier: String, sender: AnyObject?) -> Bool {
if identifier == "saveMedecine" {
print(xValue)
guard tempMedecine.name != nil else {
Common.genericAlertController(self, title: "Error", message: "You need to define a name", preferedStyle: .Alert)
return false
}
guard self.tempMedecine.dosageQuantityType != nil else {
Common.genericAlertController(self, title: "Error", message: "You need to set a quantity", preferedStyle: .Alert)
return false
}
}
else {
return true
}
return false
}
這是我在“index”viewController中的一些代碼,我需要處理驗證。
正如您所看到的,我的所有viewControllers都有一個名為tempMedecine
的屬性。 我傳遞它並在需要時更新數據。
問題是, self.tempMedecine.dosageQuantityType
返回nil
在shouldPerformSegueWithIdentifier
方法,但沒有返回nil
的unwindToViewController
方法。
我想我的TempMedecine
對象可能有兩個實例,但事實並非如此。 我還認為我在tempMedecine
之間傳遞tempMedecine
變量的方式可能有問題,但屬性tempMedecine.name
被有效傳輸,唯一的區別是這個屬性設置在我要實現驗證的同一個viewController中:
func textFieldShouldReturn(textField: UITextField) -> Bool {
textField.resignFirstResponder()
self.tempMedecine.name = textField.text
return true
}
看起來我正在使用兩個不同的范圍。 一旦我離開unwindToViewController
方法,我就會回到另一個未更新tempMedecine
變量的范圍。
但奇怪的是當我使用像xValue
這樣的簡單變量時。 如果我在unwindToViewController
方法中更新它的值,我在shouldPerformSegueWithIdentifier
得到正確的值
我錯過了什么? 謝謝你的幫助。
好的,我修好了。 發生了什么事情我實現了一些代碼來重置dataSource,如果用戶決定點擊導航欄中的Back Button,那就是tempMedecine
:
if self.isMovingToParentViewController() {
tempMedecine?.dosageQuantity = nil
tempMedecine?.dosageQuantityType = nil
}
問題是,我從未想過這個問題可能來自於此,因為我可以使用tempMedecine
數據在展開索引viewController后設置我的tableView中的值,但是當對象通過我的引用時我完全錯過了該部分。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.