передать массив из appDelegate в Viewcontroller, используя протокол без сегментов - PullRequest
0 голосов
/ 10 апреля 2019

Мне нужно передать массив от 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 iтолько что попробовал это, но он показывает только одну строку на tableview

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

1 Ответ

1 голос
/ 10 апреля 2019
  1. Использование протокола

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

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

В вашем ViewController вам нужно расширить его от Protocol и установить для него 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);
Использование NotificationCenter

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

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

В вашем контроллере view метод 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)
...