2016-11-09 3 views
-1

Привет всем Я разрабатываю приложение с помощью swift 2.2 Я объявила переменную в контроллере первого представления, я хочу получить доступ к этому во втором представлении контроллера. Я искал другую переполнение стека, ответы ничего не поддерживают меня ,Как получить доступ к переменным от одного контроллера к другому контроллеру

В моем первом контроллере представления:

class firstViewController: UIViewController{ 

var timer:nstimer? 
//performed some functions using nstimer 
} 

Теперь я хочу, чтобы остановить таймер и я держал кнопку действия во втором контроллере представления, поэтому я хочу, чтобы получить доступ к переменной timer.how для доступа ??

Я искал ответы на вопросы, связанные с переполнением стека, которые попросили использовать для подготовки к segue, но мне уже дано какое-то соединение и выполнялось segue другим контроллерам.

Теперь я ищу решение для доступа к этим переменным. Может ли кто-нибудь помочь мне решить эту проблему?

Заранее благодарен.

+0

http://stackoverflow.com/questions/24222640/passing-data-between-view-controllers-in-swift – Sahil

+0

с использованием идентификатора раскадровки и подготовки к segue вызовет проблемы в проекте? – antonyraja

+0

, потому что я использую многие контроллеры представлений и использует много сегментов между контроллерами просмотра – antonyraja

ответ

0

Ваш второй ViewController не должен ничего о первом контроллере представления знать, если это значит, что вы по существу связываете оба VC вместе.

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

С шаблоном делегата вы даете второй VC слабую ссылку на первый VC и первый VC соответствует протоколу, определенному вторым VC. Множество делегатов объяснялось много раз, поэтому я просто дам вам ссылку, а не поясню ее здесь: http://useyourloaf.com/blog/quick-guide-to-swift-delegates/

Депутатский шаблон является самым безопасным вариантом и позволяет первому VC управлять таймером в ожидаемом вместо того, чтобы модифицировать его извне, поэтому я бы рекомендовал изучить этот вариант вместо передачи ссылки на таймер.

+0

Вы можете помочь мне с использованием некоторых примеров кодов, связанных с моим кодом .... thanks @ dlbuckley – antonyraja

+0

@antonyraja есть пример в ссылке, которую я опубликовал. Он объясняет концепцию делегата в целом, чтобы вы могли понять, что происходит. – dlbuckley

1

В FirstController

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) { 
    if segue.identifier == "segueidentifier" { 

    if let destVc = segue.destinationViewController as? SecondViewController { 
     destVc.timer = self.timer 
    } 
} 
} 

В SecondViewController создать свойство таймера и использовать его.

var timer: NSTimer? 

Если у вас возникли проблемы с подключением. попробуйте это

Создать SEGUE между FirstViewController и SecondViewController с помощью Ctrl + перетащить и подключиться к второй и дать имя SEGUE идентификатор

enter image description here

+0

если segue.identifier == "segueidentifier" – antonyraja

+0

если segue.identifier == "segueidentifier". Где какой идентификатор я должен дать .. ?? – antonyraja

+0

вам нужно нажать на segue и дать имя идентификатора на правой стороне https://www.google.co.in/search?q=segue+identifier+swift&espv=2&biw=1229&bih=548&source=lnms&tbm=isch&sa=X&ved= 0ahUKEwi9xPu7zpvQAhUKPo8KHWrnB2QQ_AUICCgD # imgrc = eKAWRN9Aycd5YM% 3A – Sahil

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