Saya memiliki UIApplicationDelegate
protokol di kelas AppDelegate.m utama saya, dengan applicationDidBecomeActive
metode yang ditentukan.
Saya ingin memanggil metode ketika aplikasi kembali dari latar belakang, tetapi metode ini di controller tampilan lain. Bagaimana saya bisa memeriksa controller tampilan mana yang saat ini ditampilkan dalam applicationDidBecomeActive
metode dan kemudian membuat panggilan ke metode dalam controller itu?
NSNotificationCenter
. Terima kasih!Swift 3, 4 Setara:
menambahkan pengamat
menghapus pengamat
panggilan balik
sumber
viewDidLoad
atauviewWillAppear:animated
misalnya. Dan Anda dapat menghapus pengamat saat Anda tidak lagi membutuhkan pemberitahuan, atau ketika pengamat Anda akan dibatalkan alokasi dalam metodeSwift 2 Setara :
sumber
removeObserver
Swift:.deinit
Cepat 4.2
Tambahkan pengamat-
Hapus pengamat-
Menangani Event-
sumber
Dengan Swift 4, Apple menyarankan melalui peringatan kompiler baru yang kami hindari penggunaannya
#selector
dalam skenario ini. Berikut ini adalah cara yang jauh lebih aman untuk mencapai ini:Pertama, buat lazy var yang bisa digunakan dengan notifikasi:
Jika Anda mengharuskan pemberitahuan aktual dimasukkan, ganti saja
_
dengannotification
.Selanjutnya, kami mengatur pemberitahuan untuk mengamati agar aplikasi menjadi aktif.
Perubahan besar di sini adalah bahwa alih-alih memanggil
#selector
, kita sekarang memanggil var yang dibuat di atas. Ini dapat menghilangkan situasi di mana Anda mendapatkan crash pemilih yang tidak valid.Akhirnya, kami menghapus pengamat.
sumber
#selector
dapat memanggil metode yang dinyatakan sebagai@objc
atribut dalam Swift 4.removeObserver(self
karena diri tidak ditugaskan ketika menambahkan pengamat. Anda haruslet observer = NotificationCenter.default.addObserver
kemudianremoveObserver(observer
@objc
. Namun ketika saya mencobanya saya mendapatkan peringatan di konsol (Xcode 11.3.1 (11C504), Swift 13.3): Tidak dapat mengakhiri BackgroundTask: tidak ada tugas latar belakang yang ada dengan pengidentifikasi. Bahkan jika saya menyimpan pengamat dalam variabel sebagai NSObjectProtocol.@objc
varian.Cepat 5
sumber
Cara kombinasikan:
sumber