Mon application plante lorsque vous testez sur l'appareil, mais pas sur le simulateur. Cela arrive quand je vais me déconnecter. Je supprimer tous les enregistrements de données de base lorsque l'utilisateur se déconnecte, le code comme suit:Suppression d'objets à partir de données de base - application bloquante
-(IBAction)logOut
{
UIAlertView *getConfirmation = [[UIAlertView alloc] initWithTitle:@"Confirm" message:@"Are you sure you want to logout. You will lose any unsync'ed workouts." delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Logout", nil];
[getConfirmation show];
}
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
if (buttonIndex == 1){
// Clear the database of all objects when the user logs out.
[self deleteAllObjects:@"Workout"];
[self deleteAllObjects:@"Route"];
[self deleteAllObjects:@"WayPoint"];
[self deleteAllObjects:@"Graphs"];
[self deleteAllObjects:@"userSettings"];
[self presentModalViewController:loginViewController animated:NO];
}
}
-(void)deleteAllObjects:(NSString *)entityDescription{
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:entityDescription inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:entity];
NSError *error;
NSArray *items = [managedObjectContext executeFetchRequest:fetchRequest error:&error];
[fetchRequest release];
for (NSManagedObject *managedObject in items) {
[managedObjectContext deleteObject:managedObject];
NSLog(@"%@ object deleted", entityDescription);
}
if (![managedObjectContext save:&error]) {
NSLog(@"Error deleting %@ - error:%@",entityDescription,error);
}
}
Il semble se produire lorsque le journal I et déconnecter immédiatement. Dans ce cas, il n'y aurait pas d'objets sur 4 des 5 tables (note: userSettings aurait 1 enregistrement).
En regardant la console, le message d'erreur est '*** Terminaison de l'application en raison d'une exception non interceptée' NSInternalInconsistencyException ', raison:' Ce NSPersistentStoreCoordinator n'a pas de stockage persistant. Il ne peut pas effectuer une opération de sauvegarde. '', En regardant le débogueur se produire sur la ligne if (![managedObjectContext save:&error])
.
Je ne sais pas exactement pourquoi cela se produit, il n'y aurait pas d'enregistrements dans la table 'Workout' à ce stade, donc il n'y aurait rien à supprimer. Le simulateur semble gérer cela sans problème.
Détails du code persistant de magasin:
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator {
if (persistentStoreCoordinator != nil) {
return persistentStoreCoordinator;
}
NSURL *storeUrl = [NSURL fileURLWithPath: [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @"LegginitCoreData.sqlite"]];
NSError *error;
persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel: [self managedObjectModel]];
if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:nil error:&error]) {
// Handle error
}
return persistentStoreCoordinator;
}
Toute aide serait très apprécié, je suis bloqué sur celui-ci ne et pas sûr où aller d'ici.
En regardant la sortie de la console et peut-être le rapport d'accident sera certainement utile. – Eiko
Jetez un oeil dans le débogueur à quelle ligne de code l'application se bloque – rano
Désolé, je devrais avoir posté les résultats de la console ainsi. Je vais le faire maintenant. – Stephen