2017-09-12 2 views
0

Éviter la perte de données est un problème critique dans mon application. J'ai donc besoin d'épargner tôt et souvent pour assurer une perte minimale et une notification immédiate en cas de problème.Comment gérer les erreurs d'enregistrement CoreData?

Malheureusement, il en résulte beaucoup de if (![context save:&error]) { de manutention partout. Pour nettoyer ce d'une façon plus centralisée je pensais à mettre en œuvre une catégorie NSManagedObjectContext avec un tel procédé:

- (BOOL)saveNotify:(NSError **)error 
{ 
    NSError *saveError; 
    if (![self save:&saveError]) { 

     NSDictionary *userInfo = @{@"error" : saveError}; 

     [NSNotificationCenter.defaultCenter postNotificationName:NSManagedObjectContextSaveErrorNotification object:self userInfo:userInfo]; 

     if (error != NULL) *error = saveError; 

     return NO; 
    } 
    return YES; 
} 

Maintenant, je peux écouter de la notification d'une manière plus générale et jeter une alerte à l'utilisateur si la sauvegarde a échoué pour une raison quelconque.

Est-ce une bonne approche ou existe-t-il une meilleure façon de gérer cela?

Un problème secondaire est ce qu'il faut réellement faire quand cela se produit. Demander à l'utilisateur de quitter l'application et de redémarrer est un peu compliqué ces jours-ci car ils doivent fermer l'application via le sélecteur de tâches.

Répondre

0

Cela fonctionnera pour avertir les utilisateurs des erreurs de sauvegarde. Mais il y a deux choses à garder à l'esprit:

  1. Le message dans saveError peut ne pas être compréhensible aux utilisateurs. Vous ne devriez probablement pas le présenter. Au lieu de cela, regardez le code d'erreur et le domaine et essayez de présenter quelque chose qui a plus de sens.
  2. Vous devrez essayer d'identifier les erreurs potentielles et les solutions probables. Dire aux utilisateurs de forcer la fermeture de l'application a peu de chances d'aider si, par exemple, le magasin persistant est corrompu ou si l'appareil manque d'espace. La plupart des erreurs seront des éléments qui apparaîtront pendant le développement si vous effectuez des tests approfondis. Des choses comme des échecs de validation ou des valeurs manquantes.