在编写Master-Detail应用程序时,我在Swift中遇到了一个奇怪的行为.
这是场景:
这是一个简单的任务管理器应用程序.我有两个文本控件(TASKNAME,TaskDescription在TaskDetailView),并具有相同的名称,但在lowerCamelCase(两个字符串变量TASKNAME,taskDescription)在TaskDetailViewController声明.
@IBOutlet var TaskName:UITextField! //UpperCamelCase
@IBOutlet var TaskDescription:UITextView! //UpperCamelCase
var taskName:String? //lowerCamelCase
var taskDescription:String? //lowerCamelCase
Run Code Online (Sandbox Code Playgroud)
我像往常一样在ViewDidLoad()上设置Text控件的值:
override func viewDidLoad() {
super.viewDidLoad()
TaskName.text = taskName
TaskDescription.text = taskDescription
}
Run Code Online (Sandbox Code Playgroud)
我像往常一样在prepareForSegue(来自TaskListViewController)中传递数据:
override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) {
if(segue.identifier == "TaskListSegue"){
let detailViewController = segue.destinationViewController as ToDoTaskViewController
let (task, desc) = m_ToDoListManager.GetTask(TaskListView.indexPathForSelectedRow().row)
println("selected \(task) \(desc)")
detailViewController.taskName = task
detailViewController.taskDescription = desc
}
}
Run Code Online (Sandbox Code Playgroud)
一切实施的方式都是正确的.但是现在当您运行应用程序时,未设置文本控件的值.实际上,也没有设置变量的值.
这里一定要发生什么?
我已经调查了这个问题,并提出了一个解决方案(请参阅下面的答案).另请参阅Martin R的答案以获得详细说明.我只是想与大家分享这个.我不确定是否有人遇到过这个问题.
更新:
这是实际的代码:https: …