2016-07-19 1 views
0

У меня есть мой ViewController.swift, который запускается при загрузке приложения. Затем я перехожу к другому файлу SecondViewController.swift.Понимание взаимодействия между файлами Swift - как мне звонить из одного в другой

Экземпляр ViewController.swift все еще существует, правильно?

Так что теперь, из SecondViewController.swift, я называю ViewController(). SomeFunction()

"viewDidLoad" не дозвонились, только функцию The ViewController, я специально призван.

Теперь: если я создаю переменную Int в ViewController.swift «var testNum = 2», а в представлении ViewControllerDidLoad меняю значение на 14. Затем я перехожу к SecondViewController. Затем я вызываю в ViewController(). SomeFunction(), и я печатаю значение testNum в этой функции, я получаю экземплярное значение 2 вместо значения, которое имеет ViewController, равное 14, что заставляет меня полагать, что я создал новая копия ViewController, вызвав функцию таким образом.

Это правильно? Это то, что я сделал? И если да, существует ли способ вызвать функцию в существующем ViewController вместо создания нового ViewController из SecondViewController.swift?

СПАСИБО!

ответ

1

У меня есть мой ViewController.swift, который запускается при загрузке приложения. Затем я перехожу к другому файлу SecondViewController.swift.

Nitpicking: вы не переходите между «файлами», вы переходите между экземплярами классов, определенных в этих файлах.

Экземпляр ViewController.swift все еще существует, правильно?

Да. Ну, исходный экземпляр класса, определенного в этом файле, см. Выше.

Так что теперь, из SecondViewController.swift, я называю ViewController(). SomeFunction()

В ViewController в "viewDidLoad" не дозвонились, только функция, которую я специально призван.

С ViewController() создается новый экземпляр класса ViewController, а затем непосредственно вызывать этот метод на него. Это не имеет большого смысла.

Теперь: если я создаю экземпляр переменной Int в ViewController.swift «вар testNum = 2» и в viewDidLoad в ViewController, я изменить его значение до 14. Тогда я SEGUE к SecondViewController. Тогда я взываю к ViewController(). SomeFunction() и напечатать значение testNum в этой функции я получаю инстанцированное значение 2

При вызове ViewController() вы создаете новый экземпляр класса определен в ViewController.swift. Вполне (очень), вероятно, это не то, что вы хотите сделать. Кажется, вы скорее хотите висеть на оригинальном экземпляре этого VC. Поэтому вам нужно перенести это при выполнении segue.

Я уверен, что вы прочитали View Controller Programming Guide for iOS, верно? ;-) Это соответствующий раздел:

Метод prepareForSegue: sender: метод контроллера представления источника позволяет передавать данные с контроллера представления источника на контроллер представления назначения. Объект UIStoryboardSegue, переданный методу, содержит ссылку на контроллер представления назначения вместе с другой связанной с сегом информацией.

Обычно вы не хотите сохранять ссылку на исходный контроллер представления, а переносите соответствующие данные из этого в VC, к которому вы переходите (чтобы отделить их).

+0

Я собираюсь использовать это как правильный ответ для объяснения того, что ViewController() действительно создает новый экземпляр класса. Я пытался сохранить код SKProduct/SKPayment/In-App Purchase в моем основном ViewController, и, поскольку покупка в приложении производится из другого контроллера представления, я хотел вызвать покупку с помощью SKPaymentQueue.defaultQueue(). AddPayment (оплата) "в основном ViewController. Вместо этого я просто переместил код SKProduct/SKPayment/In-App Purchase в контроллер просмотра, из которого сделаны покупки. Благодаря! – RanLearns

0

Если вы собираетесь хранить значения, я бы рекомендовал создать класс модели.

https://developer.apple.com/library/ios/documentation/General/Conceptual/DevPedia-CocoaCore/MVC.html

Это позволит сохранить данные независимо от контроллеров, потому что, чтобы ответить на ваш «Экземпляр ViewController.swift по-прежнему существует, верно?» вопрос, он может существовать или не существовать в зависимости от памяти. Вот почему создание модели желательно, потому что тогда вас это не беспокоит.

Если вы хотите примеры, есть много онлайн, если вы google MVC iOS. Надеюсь, это поможет.

Смежные вопросы