Estoy tratando de pasar un objeto del delegado de mi aplicación a un receptor de notificaciones en otra clase.
Quiero pasar entero messageTotal
. En este momento tengo:
En receptor:
- (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];
En la clase que está haciendo la notificación:
[UIApplication sharedApplication].applicationIconBadgeNumber = messageTotal;
[[NSNotificationCenter defaultCenter] postNotificationName:@"eRXReceived" object:self];
Pero quiero pasar el objeto messageTotal
a la otra clase.
Respuestas:
Deberá usar la variante "userInfo" y pasar un objeto NSDictionary que contenga el entero entero messageTotal:
En el extremo receptor puede acceder al diccionario userInfo de la siguiente manera:
fuente
messageTotal
una insignia en un UIButton, ¿sabes cómo puedo actualizar el botón con el nuevo recuento de insignias? El código para mostrar la imagenviewDidLoad
esUIBarButtonItem *eRXButton = [BarButtonBadge barButtonWithImage:buttonImage badgeString:@"1" atRight:NO toTarget:self action:@selector(eRXButtonPressed)];
Sobre la base de la solución proporcionada, pensé que podría ser útil mostrar un ejemplo pasando su propio objeto de datos personalizado (al que he hecho referencia aquí como 'mensaje' según la pregunta).
Clase A (remitente):
Clase B (receptor):
fuente
object
parámetro enpostNotificationName
debe significar el que envía esta notificación.userInfo
parámetro y la respuesta aceptada anteriormente se ha editado para mostrar esto.userInfo
diccionario como la forma de pasar los datos del objeto.Como señaló @Johan Karlsson ... Lo estaba haciendo mal. Esta es la forma correcta de enviar y recibir información con NSNotificationCenter.
Primero, miramos el inicializador para postNotificationName:
fuente
Vamos a pasar nuestra información usando el
userInfo
param. El[NSObject : AnyObject]
tipo es una retención de Objective-C . Entonces, en Swift land, todo lo que tenemos que hacer es pasar un diccionario Swift que tenga claves derivadasNSObject
y valores que puedan serAnyObject
.Con ese conocimiento creamos un diccionario que pasaremos al
object
parámetro:Luego pasamos el diccionario a nuestro parámetro objeto.
Remitente
Clase de receptor
Primero debemos asegurarnos de que nuestra clase esté observando la notificación
Entonces podemos recibir nuestro diccionario:
fuente
Swift 5
Bonificación (¡que definitivamente deberías hacer!):
Reemplazar
Notification.Name("SomeNotificationName")
con.someNotificationName
:Reemplazar
"key0"
y"key1"
conNotification.Key.key0
yNotification.Key.key1
:¿Por qué debería hacer esto definitivamente? Para evitar costosos errores tipográficos, disfrute de cambiar el nombre, disfrute de encontrar el uso, etc.
fuente
'Key' is not a member type of 'Notification'
. Ver aquí: https://ibb.co/hDQYbd2Key
estructura se ha eliminado desde entonces. Estoy actualizando la respuestaSwift 5.1 objeto / tipo personalizado
fuente