iPhone - notificación publicada dos veces después de la advertencia de memoria

StackOverflow https://stackoverflow.com/questions/1067730

  •  21-08-2019
  •  | 
  •  

Pregunta

Estoy usando notificaciones para pasar datos desde un controlador de la vista de detalle de la RootViewController en mi aplicación. Los métodos funcionan bien hasta que hay una advertencia de memoria.

La notificación se maneja dos veces después de las advertencias de memoria.

I pasar los datos de nuevo a la RootViewController cuando el usuario selecciona una fila en la DetailViewController. El método didSelectRowAtIndexPath se llama sólo una vez sino el observador notificación se llama dos veces!

¿Debo estar quitando la notificación en didReceiveMemoryWarning? ¿O hay algún otro problema con el código?

Publicar el código en cuestión

de RootViewController viewDidLoad

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(rowSelected:) name:@"SelectionNotification" object:nil];

de DetailViewController didSelectRowAtIndexPath

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    NSMutableDictionary *dictionary = [[[NSMutableDictionary alloc] init] autorelease];

    [dictionary setObject:selectedRow forKey:@"row"];
    [[NSNotificationCenter defaultCenter] postNotificationName:kSelectionNotificationName object:self userInfo:dictionary];

    [[self navigationController] popToRootViewControllerAnimated:YES];
}

Gracias por cualquier ayuda.

¿Fue útil?

Solución

Soy bastante nuevo en el desarrollo del iPhone, pero lo que he notado hasta ahora es que después de una advertencia de memoria, la implementación predeterminada del método didReceiveMemoryWarning es descargar la vista si no es visible.

Creo en su caso, el controlador de vista raíz no es visible, y por lo tanto sin carga. Una vez que el pop de nuevo al controlador de vista raíz, el método viewDidLoad se llama de nuevo, y por lo tanto la instancia controlador de vista (que en sí no se descarga, sólo la vista es) registra a sí mismo de nuevo al centro de notificación.

La solución sería dar de alta en el centro de notificación en tiempo de inicialización, o bien estar en el método init por defecto, o el método de initWithNibName:bundle:, o en el método initWithCoder:.

Otros consejos

A medida que se insinuando, si se suscribe a una notificación en dos ocasiones, la recibirá dos veces.

Lo más probable es que se vuelva a crear instancias de un objeto desasignado y volver a suscribirse a la notificación.

Establece un punto en el que se suscribe a notificaciones y es muy probable que lo golpeó dos veces.

Puede reemplazar el descriptor de acceso y dejar de recibir notificaciones allí. O bien, puede hacerlo con MVA.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top