Общая переменная между двумя вкладками для Xcode

У меня есть два контроллера представления, над которыми я работаю, и наследует их от контроллера представления Base

  1. класс A_ViewController: BaseViewController
  2. класс B_ViewController: BaseViewController

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

Я попытался поместить имя переменной в BaseViewController для двух классов A, B для доступа

var allPostsDownloaded: [Post]! 

Поэтому, прежде чем A_VC загружает любые данные, он проверяет эту переменную allPostsDownloaded и загружает ее, если данные существуют. Если он не существует, я добавляю к этой переменной. Поэтому при переключении на B_VC можно сделать то же самое, и никакие данные не будут повторно загружаться, если это не требуется.

Причина, по которой я не использую segue или protocal для передачи данных, состоит в том, что два VC взаимодействуют довольно сильно с моей базой данных. Таким образом, было намного проще попробовать и получить муравьиные данные, чтобы отслеживать, где это происходит.

Однако проблема в том, что i

 var allPostsDownloaded: [Post]! 

вызывается каждый раз, когда я переключаюсь между A и B VC (которые являются вкладками). Это приведет к тому, что переменная будет пустой и деинициализирована.

Думаю, я мог бы использовать глобальную переменную, но это не хорошая практика? Может ли кто-нибудь объяснить, почему он переименовывается, когда появляется новая вкладка? И лучшее решение для этого.

2 Solutions collect form web for “Общая переменная между двумя вкладками для Xcode”

поскольку @avi упоминает о создании нового одноэлементного класса, то вы можете легко и легко пройти и прочитать. Ниже приведен пример

 class PersistentData { static let sharedInstance = PersistentData() // your global persistent variable var allPostsDownloaded = [Post]() } 

Поэтому в ваших контроллерах вы можете просто прочитать и установить как показано ниже

 // read print(PersistentData.sharedInstance.allPostsDownloaded) // set new data. this just example, hence depends on your case PersistentData.sharedInstance.allPostsDownloaded.append(newPost) PersistentData.sharedInstance.allPostsDownloaded = posts 

также имейте в виду, что если вы хотите читать новое значение при переключении между вкладками, вы можете получить обновление в viewDidAppear или viewWillAppear

Вы можете создать класс Singleton с переменной экземпляра и сохранить все загруженные данные и получить доступ к переменной класса singleton из любого класса классов вашего проекта.

  • XCode & Facebook IOS SDK - неверные инструкции
  • Main.storyboard: Внутренняя ошибка. Пожалуйста, укажите ошибку в Xcode 7.2
  • Как получить UIImage из AppIcon?
  • Можно ли загрузить в App Store из Lion?
  • Просмотр контроллера загружается дважды - как его исправить?
  • "Clang quit неожиданно" (xcode Crash)
  • Xcode 4.4, симулятор IOS 5.1. Проблема с картой Twitter
  • WebCore: рабочий: EXC_BAD_ACCESS при подключении отладчика Safari к проекту Xcode 8.3
  • Сделать .IPA для iPhone и iPad
  • Xcode, cocoapods + файл nib, s.resources = не работают
  • Метод запуска SKAction с аргументом?
  • Interesting Posts

    UITableView добавляет строки и прокручивается вниз

    Я не могу переупорядочить UITabBarItem (ы) в UITabBar

    Как сопоставить UnsafePointer с другим типом?

    ACAccountStore accountsWithAccountType, возвращающий пустой список, но запрос на доступ предоставляется

    Передача управляемого объекта ObjectContext через представления UITabBarController

    cocos2d Как сделать загрузку изображения дольше?

    Имеет ли URLForUbiquityContainerIdentifier: return nil, когда доступ к сети недоступен?

    Проверьте, установлен ли на iOS профиль mobileconfig

    XCode: 7 Ошибка установки приложения: не был найден действительный профиль подготовки для этого исполняемого файла

    Несколько представлений в контроллере просмотра раскадровки Xcode, один из них не появится в редакторе раскадровки

    Есть ли способ использовать UIView / CALayer в OpenGL или GLKit от Apple без рендеринга в UIImage / CGImageRef?

    Файлы NSDocumentDirectory исчезают в ios

    Facebook Deep Linking на iOS не запускает мое приложение

    Пользовательский UITableviewcell показывает «фатальная ошибка: невозможно развернуть опцию.

    UIScrollView и setContentOffset

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.