2015-06-23 4 views
11

Я хотел бы написать в тексте или csv (желательно) файл с переменной с контроллера вида.Swift: Как получить доступ к переменной AppDelegate с контроллера View?

Действительно, я делаю приложение для рисования, и я хотел бы записать в файл текущую позицию пальца.

class ViewController: UIViewController {var lastPoint = CGPoint.zeroPoint ... } 

Я хотел бы иметь доступ к lastPoint.x и lastPoint.y от AppDelegate. как я мог это сделать? Спасибо.

+0

Где и как ваш ViewController создан? –

ответ

24

Ваш вопрос полон путаницы, но если это то, что вы ищете:

Вы можете получить доступ к AppDelegate, получив ссылку на него так:

let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate 

после этого, если вам у вас есть свойство, называемое lastPoint в приложении appDelegate, вы можете легко получить доступ к его компонентам:

let x = appDelegate.lastPoint.x 
let y = appDelegate.lastPoint.y 

Если вам необходимо получить доступ к свойству ViewController из AppDelegate, то я предлагаю, имеющую ссылку на ваш контроллер представления в вашем AppDelegate:

var myViewController: ViewController! 

тогда, когда создаются ваш контроллер представления вы можете хранить ссылку на него в AppDelegate собственности:

Если создать контроллер представления за пределами вашего AppDelegate: синтаксис

Swift 1-2

var theViewController = ViewController() 
let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate 
appDelegate.myViewController = theViewController 

Swift 3-4 синтаксис

var theViewController = ViewController() 
let appDelegate = UIApplication.shared.delegate as! AppDelegate 
appDelegate.myViewController = theViewController 

Если вы создаете контроллер представления внутри вашего AppDelegate:

self.myViewController = ViewController() 

После того, что вы можете получить доступ к данным с вашего ViewController от вашего AppDelegate просто получив доступ к своему имуществу:

let x = self.myViewController.lastPoint.x 
let y = self.myViewController.lastPoint.y 
+0

На самом деле все наоборот. Из appDelegate мне нужно иметь доступ к переменной lastPoint.x и lastPoint.y (найденной в ViewController) –

+0

См. Отредактированный ответ –

+1

Это не работает. Существует ошибка в этой строке: appDelegate.myViewController = theViewController «ожидается декларация» А также: пусть х = self.myViewController.lastPoint.x пусть у = self.myViewController.lastPoint.y –

1

Swift 3 Update

var theViewController = ViewController() 
    let appDelegate = UIApplication.shared.delegate as! AppDelegate 
    appDelegate.myViewController = theViewController 
0

Вы можете создать BaseViewController и написать этот

class BaseViewController { 
lazy var appDelegate : AppDelegate { 
    return UIApplication.shared.delegate as? AppDelegate 
}} 

и наследовать другие viewcontrollers с BaseViewController и получить доступ к этим путем

class ViewController : BaseViewController { 

override func viewDidLoad() { 
    super.viewDidLoad() 
    print(self.appDelegate?.lastPoint.x) 
    print(self.appDelegate?.lastPoint.x) 
}} 
1

мне удалось получить доступ к моему ViewController из делегата приложения, создав экземпляр ViewControll в AppDelegate.быстро, как:

var mainViewController = ViewController() 

func applicationWillEnterForeground(_ application: UIApplication) { 
    mainViewController.myVariable = "Hello". 
} 

Все-таки я не понимаю, каким образом AppDelegate «знает», что mainViewController должен указывать на конкретный ViewController. Поскольку мое приложение имеет один вид и один ViewController, все в порядке, но что у меня было несколько ViewControllers, связанных с различными UIViews? Цените, если кто-то здесь может пролить свет на это. С наилучшими пожеланиями, Andre

+0

Только что узнал, что AppDelegate не ссылается на мой фактический ViewController.swift. Кажется, он создал новый экземпляр ViewController внутри моего AppDelegate, поэтому я до сих пор не знаю, как получить доступ к существующему экземпляру VC. Оцените любые разъяснения по этой теме. –

+0

Просто нашел этот ответ на то, что мне нужно здесь, в SO: https://stackoverflow.com/questions/43831571/swift-ios-how-to-run-function-in-viewcontroller-from-appdelegate –

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