Существует множество способов сделать это, и важно выбрать правильный. Вероятно, одним из самых больших архитектурных решений является то, как код модели будет доступен или доступен во всем приложении.
Я написал сообщение в блоге об этом некоторое время назад: Общий код модели , Ниже приведен краткий обзор:
. Один из подходов состоит в том, чтобы совместно использовать указатели на объекты модели между контроллерами представления.
Поскольку подготовка к segue является наиболее распространенной, здесь приведен пример:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
var next = segue.destinationViewController as NextViewController
next.dataSource = dataSource
}
Другой подход заключается в том, чтобы обрабатывать полный экран данных одновременно, и вместо того, чтобы связывать контроллеры представлений друг с другом, каждый из них контролирует один источник данных, который они могут получить независимо.
Наиболее распространенный способ, которым я видел это, - это экземпляр singleton . Поэтому, если ваш объект singleton был DataAccess
, вы можете сделать следующее в методе viewDidLoad для UIViewController:
func viewDidLoad() {
super.viewDidLoad()
var data = dataAccess.requestData()
}
. Существуют дополнительные инструменты, которые также помогают передавать данные:
Хорошая вещь в Core Data заключается в том, что она имеет обратные отношения. Поэтому, если вы хотите просто предоставить NotesViewController объект заметок, который вы можете использовать, поскольку он будет иметь обратную связь с чем-то другим, например, с ноутбуком. Если вам нужны данные на ноутбуке в NotesViewController, вы можете вернуться к графику объекта, выполнив следующие действия:
let notebookName = note.notebook.name
Подробнее об этом читайте в моем сообщении в блоге: Общий код модели
В руководстве bash обратите внимание, что расширение скобки во время замены параметра , но не рекурсивно:
Порядок расширений: расширение скобы; расширение тильды, расширение параметров и переменных, арифметическое расширение и подстановка команд (выполняется слева направо); расщепление слов; и расширение имени файла.
blockquote>Это означает, что любая тильда (или ссылки на параметры или подстановка команд), хранящаяся нерасширенной в переменной bash, не будет автоматически разрешать . Ваша переменная JAVA_HOME содержит литеральную тильду, поэтому bash не будет автоматически расширять ее.
Вероятно, ваше исправление работало, потому что расширение тильды не применяется в кавычках:
$ echo "~" ~ $ echo ~ /home/jeffbowman
. .. но расширение параметра, подобное
$HOME
, происходит в кавычках. Замена его с помощью $ HOME расширяется до вашего домашнего каталога во время назначения JAVA_HOME .FOO=~/bar # stores /home/jeffbowman/bar FOO="~/bar" # stores ~/bar FOO=$HOME/bar # stores /home/jeffbowman/bar FOO="$HOME/bar" # stores /home/jeffbowman/bar
Хотя лучший вариант заключается в том, чтобы обеспечить правильное назначение, если вы хотите расширить это вручную, эти вопросы SO имеют некоторые хорошие варианты: