передача массива из AppDelegate в Viewcontroller с использованием протокола без переходов

#arrays #swift #userdefaults

#массивы #swift #ошибки пользователя

Вопрос:

Мне нужно передать массив из AppDelegate в с viewcontroller использованием протоколов. Я новичок в этой концепции. Пожалуйста, помогите мне с некоторым кодом. Мне нужно передать dataArr строки другому viewcontroller и отобразить их на tableview

 guard let message = note(fromRegionIdentifier: region.identifier) else { return }
window?.rootViewController?.showAlert(withTitle: nil, message: "you have entered "     message)
if (dataArr.count <= 5){
    dataArr.append(message)
}

let userdefaults = UserDefaults.standard
userdefaults.set(dataArr, forKey: "message")
}
  

Мне просто нужно сохранить эти предупреждения userdefaults и отобразить их на tableview я только что попробовал это, но он показывает только одну строку на tableview

 let savedstring = UserDefaults.standard.array(forKey: "message")
cell?.cordinateLabel.text =  savedstring?[indexPath.row] as? String
return cell!
  

Комментарии:

1. Используйте центр уведомлений для отправки уведомлений с полезной нагрузкой

2.Q1: «Мне нужно передать массив из AppDelegate в viewcontroller с использованием протоколов» что делает любой массив, связанный с моделью, в вашем приложении-делегате? Q2: для чего вам нужен протокол?

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

Ответ №1:

  1. Использование протокола

Сначала создайте протокол

 protocol MyDelegate {
     public yourMethod(param: String);
}
  

В вашем ViewController вам нужно расширить его из протокола и установить для него значение AppDelegate

  class YourViewController: MyDelegate {
     // Your Other methods

     override func viewDidLoad() {
          super.viewDidLoad()

          // set your delegate to Appdelegate
          let appDelegate = UIApplication.shared.delegate as! AppDelegate
          appDelegate.yourDelegate = self;
     }


     func yourMethod(param: String) {
      // Do your stuff
     }
 }
  

Теперь, наконец, в AppDelegate объявите объект протокола и вызовите yourMethod через его ссылку.

  class AppDelegate: UIApplicationDelegate {
     public yourDelegate: MyDelegate!;
 }
  

Теперь вы можете вызывать свой метод в любом месте вашего AppDelegate, например

   yourDelegate.yourMethod(params);
  
  1. Использование NotificationCenter

Самый простой способ — сделать это с помощью NotificationCenter. Сначала вам нужно добавить расширение к уведомлению.Назовите любое место в вашем приложении. Нравится

 extension Notification.Name { static let mynotification = Notification.Name("mynotification") }
  

В вашем методе viewDidLoad viewDidLoad контроллера представления добавьте

 NotificationCenter.default.addObserver(self, selector: #selector(yourMethod), name: NSNotification.Name.mynotification, object: nil)
  

Затем в вашем ViewController добавьте метод, который будет вызываться при запуске уведомления

  func yourMethod(){
        //// do something
   }
  

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

  NotificationCenter.default.post(name: NSNotification.Name.mynotification, object: nil)