Saya mencoba meneruskan objek dari delegasi aplikasi saya ke penerima notifikasi di kelas lain.
Saya ingin lulus bilangan bulat messageTotal
. Sekarang saya punya:
Dalam Penerima:
- (void) receiveTestNotification:(NSNotification *) notification
{
if ([[notification name] isEqualToString:@"TestNotification"])
NSLog (@"Successfully received the test notification!");
}
- (void)viewDidLoad {
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(dismissSheet) name:UIApplicationWillResignActiveNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(receiveTestNotification:) name:@"eRXReceived" object:nil];
Di kelas yang melakukan pemberitahuan:
[UIApplication sharedApplication].applicationIconBadgeNumber = messageTotal;
[[NSNotificationCenter defaultCenter] postNotificationName:@"eRXReceived" object:self];
Tapi saya ingin meneruskan objek messageTotal
ke kelas lain.
Jawaban:
Anda harus menggunakan varian "userInfo" dan meneruskan objek NSDictionary yang berisi integer messageTotal:
Di sisi penerima Anda dapat mengakses kamus userInfo sebagai berikut:
sumber
messageTotal
lencana di UIButton, apakah Anda tahu bagaimana saya bisa menyegarkan tombol dengan jumlah lencana baru? Kode untuk menampilkan gambarviewDidLoad
adalahUIBarButtonItem *eRXButton = [BarButtonBadge barButtonWithImage:buttonImage badgeString:@"1" atRight:NO toTarget:self action:@selector(eRXButtonPressed)];
Membangun pada solusi asalkan saya pikir mungkin membantu untuk menunjukkan contoh melewati objek data kustom Anda sendiri (yang saya rujuk di sini sebagai 'pesan' sesuai pertanyaan).
Kelas A (pengirim):
Kelas B (penerima):
sumber
object
param dipostNotificationName
harus berarti satu yang mengirimkan pemberitahuan ini.userInfo
param dan jawaban yang diterima di atas sekarang telah diedit untuk menunjukkan ini.userInfo
kamus sebagai cara untuk meneruskan data objek.Seperti yang ditunjukkan oleh @Johan Karlsson ... Saya salah melakukannya. Inilah cara yang tepat untuk mengirim dan menerima informasi dengan NSNotificationCenter.
Pertama, kita melihat inisialisasi untuk postNotificationName:
sumber
Kami akan meneruskan informasi kami menggunakan
userInfo
param. The[NSObject : AnyObject]
jenis adalah terus-alih dari Objective-C . Jadi, di tanah Swift, semua yang perlu kita lakukan adalah memasukkan kamus Swift yang memiliki kunci yang berasal dariNSObject
dan nilai-nilai yang dapatAnyObject
.Dengan pengetahuan itu kami membuat kamus yang akan kami sampaikan ke
object
parameter:Lalu kami meneruskan kamus ke parameter objek kami.
Pengirim
Kelas Penerima
Pertama, kita perlu memastikan kelas kita memperhatikan notifikasi
Maka kita dapat menerima kamus kami:
sumber
Cepat 5
Bonus (yang harus Anda lakukan!):
Ganti
Notification.Name("SomeNotificationName")
dengan.someNotificationName
:Ganti
"key0"
dan"key1"
denganNotification.Key.key0
danNotification.Key.key1
:Mengapa saya harus melakukan ini? Untuk menghindari kesalahan pengetikan yang mahal, nikmati penggantian nama, nikmati temukan penggunaan dll ...
sumber
'Key' is not a member type of 'Notification'
. Lihat di sini: https://ibb.co/hDQYbd2Key
struct telah dihapus sejak saat itu. Saya memperbarui jawabannyaSwift 5.1 Obyek / Jenis Kustom
sumber