Estoy analizando los datos que recibí de una notificación remota y luego los guardo inmediatamente en mi base de datos dentro de AppDelegate. Pero cuando recibí una nueva notificación remota mientras la aplicación se está ejecutando, el UITableView no se actualiza con los nuevos datos.

Seguí este tutorial sobre cómo usar sqlite. Pero cuando se trata de notificar cuando se ha agregado un nuevo elemento a la base de datos, no me funciona ya que mi caso es AppDelegate y UITableViewController y el caso del tutorial es ViewController y { {X3}}

Así lo hace el tutorial después de implementar el protocolo

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
    EditInfoViewController *editInfoViewController = [segue destinationViewController];
    editInfoViewController.delegate = self;
}

En mi caso sera

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
    AppDelegate *appDelegate = [segue destinationViewController];
    appDelegate.delegate = self;
}

Y obtendré este error:

No se puede inicializar una variable de tipo 'AppDelegate * __strong' con un rvalue de tipo '__kindofUIViewCOntroller *'

¿Qué alternativa puedo utilizar para prepareForSegue?

Estoy un poco perdido aquí, así que agradeceré cualquier ayuda que pueda obtener.

0
Jongers 28 ene. 2016 a las 04:09

2 respuestas

La mejor respuesta

Sí, este error es obvio porque AppDelegate no es un UIViewController. Está intentando enviar un objeto AppDelegate, por eso recibió un error.

En su caso, si desea guardar los datos de la notificación recién recibida en AppDelegate, simplemente cree un método en AppDelegate.

Luego, cuando reciba una notificación, simplemente llame a ese método que guardará sus datos en la base de datos.

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {

 if (application.applicationState == UIApplicationStateActive) {

     NSLog(@"Push received in Active State: %@", userInfo);
 }
 else {
     NSLog(@"Push received in InActive State: %@", userInfo);
 }

[self saveDataToDatabse:userInfo]; 
} 


#pragma mark - Private methods
-(void)saveDataToDatabse:(id)data {

 // your logic here

  [[NSNotificationCenter defaultCenter] postNotificationName:@"NewDataSaved" object:nil];  
}

En su ViewController.m agregue observador en el método viewDidLoad.

- (void)viewDidLoad{

   [super viewDidLoad];

   [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reloadTable:) name:@"NewDataSaved" object:nil];
} 

-(void)reloadTable:(NSNotification)notification {

   // your logic here  
  [self.tableView reloadData]; 
}  
1
rushisangani 28 ene. 2016 a las 01:50

Estás intentando convertir un ViewController como una clase AppDelegate aquí:

AppDelegate *appDelegate = [segue destinationViewController];

Debería observar que destinationViewController es y usar el tipo de clase correcto. Si no lo sabe, intente cerrar la sesión de destinationViewController:

NSLog("viewController: %@", [segue destinationViewController]);

Ese es el primer problema, no estoy seguro de si habrá más.

1
David Wong 28 ene. 2016 a las 01:24