В моем приложении есть два контроллера ViewControll, которые я переключаю взад и вперед через segues. Первый (основной) VC имеет несколько переменных, которые инициализируются. Второй VC - редактор клавиатуры, который может изменить одну из переменных в первом VC; первый VC отправляет индикатор изменения переменной, а второй VC отправляет обратно новое значение.Измененное значение в ViewController сбрасывается после возврата из segue
Однако, если я изменяю значение, измените второе значение, первое значение, которое было изменено, сбрасывается до его начального значения.
Вот первый ViewController (по крайней мере, необходимая для примера часть):
class ViewController: UIViewController {
var idToChange: Int;
var ValueOne: Int;
var ValueTwo: Int;
required init(coder aDecoder: NSCoder) {
idToChange = 0;
ValueOne = 1;
ValueTwo = 2;
super.init(coder: aDecoder);
}
@IBAction func clickChangeValue1(B: UIButton)
{
idToChange = 1;
performSegueWithIdentifier("segueKeypadView", sender: self);
}
@IBAction func clickChangeValue2(B: UIButton)
{
idToChange = 2;
performSegueWithIdentifier("segueKeypadView", sender: self);
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
var vc: KeypadViewController = segue.destinationViewController as KeypadViewController;
vc.idToChange = idToChange;
}
}
и вот второй ViewController:
class KeypadViewController: UIViewController {
var idToChange: Int;
var changedValue: Int;
required init(coder aDecoder: NSCoder) {
idToChange = 0;
changedValue = 0;
super.init(coder: aDecoder);
}
// Note that idToChange is set correctly by the segue
// Code that sets changedValue left out
@IBAction func clickTheOKButton(B: UIButton)
{
performSegueWithIdentifier("segueMainView", sender: self);
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
var vc: ViewController = segue.destinationViewController as ViewController;
switch (idToChange)
{
case 1:
vc.ValueOne = changedValue;
case 2:
vc.ValueTwo = changedValue;
default:
break;
}
}
}
Когда основные запросы на контроллере, который будут Значение1 изменен, а второй контроллер пытается изменить Value1 на 10, тогда Value1 равен 10. Однако если главный контроллер затем изменит Value2, а второй контроллер попытается изменить Value2 на 20, тогда Value2 станет 20, но Value1 есть t обратно к его инициализированному значению 1.
Недопустимо передавать все сменные значения в первом контроллере ко второму, а затем, после второго, отправить их обратно (после любых изменений) на первый, есть ли способ, чтобы второй контроллер менял одно значение без сброса других?
Используете ли вы разматывать сеанс, чтобы вернуться к первому контроллеру? Если нет, то вы фактически не возвращаетесь, вы создаете новый контроллер. – rdelmar
"Un-wind - seg - ue?" Ваши идеи интригуют меня, и я хочу подписаться на ваш информационный бюллетень. (Серьезно, это решило - спасибо.) –