Mon code exécute un certain nombre de tâches à l'aide des données de base, puis, lorsque je vais enregistrer, il se bloque sans erreur. Mon code pour la sauvegarde est tout simplement:L'abandon de l'application sur [managedObjectContext save:] sans erreur
[[self managedObjectContext] save:&error];
NSLog(@"Error: %@", error);
Il ne parvient pas à la ligne d'erreur, il est tombé en panne et quitter à l'écran d'accueil en ce moment-là.
J'ai tout autre chose que 'Guard Malloc' sélectionné dans Diagnostics.
C'est le journal que je reçois quand il exécute la commande de sauvegarde:
CoreData: sql: BEGIN EXCLUSIVE
CoreData: sql: SELECT Z_MAX FROM Z_PRIMARYKEY WHERE Z_ENT = ?
CoreData: sql: UPDATE Z_PRIMARYKEY SET Z_MAX = ? WHERE Z_ENT = ? AND Z_MAX = ?
CoreData: sql: COMMIT
CoreData: sql: BEGIN EXCLUSIVE
CoreData: sql: INSERT INTO ZENTRY(Z_PK, Z_ENT, Z_OPT, ZLOCATION, ZBOOKMARKED, ZCREATIONDATE, ZENTRYID, ZMESSAGE, ZSECTIONIDENTIFIER, ZTICDSSYNCID, ZVERSION) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
CoreData: sql: COMMIT
CoreData: sql: pragma page_count
CoreData: annotation: sql execution time: 0.0047s
CoreData: sql: pragma freelist_count
CoreData: annotation: sql execution time: 0.0069s
Il n'y a aucune mention de toute erreur avant cela. Comment puis-je avoir une idée de ce qui bloque mon application?
EDIT: Je sais maintenant que cela se produit après un appel à [NSEntityDescription insertNewObjectForEntityForName:@"Entry" inManagedObjectContext:[self managedObjectContext]];
et qu'il est provoqué par une méthode effectuée sur mon magasin de données principal par TICoreDataSync avant cela. Je ne peux pas changer ce code, ou le retirer de travailler avec mon magasin de données principal. Je pense que c'est un problème de faire avec le magasin étant accédé sur plusieurs threads, alors maintenant je dois savoir comment faire face à cela, sur le thread principal?
je me suis déplacé autour, et compris qu'il se produit uniquement après avoir appelé '[NSEntityDescription insertNewObjectForEntityForName: @ "Entrée" inManagedObjectContext: [self managedObjectContext]];'. C'est toujours sur le contexte principal, donc je suppose que ce doit être un autre code qui s'exécute sur un contexte d'arrière-plan. J'ai TICoreDataSync mis en place avec dropbox, et qui s'exécute sur le magasin de données de base avant que ce code arrive, et c'est ce qui cause le problème, mais je ne peux pas changer leur code. Comment puis-je rendre le thread de fond compatible? – Andrew
Ceci est une bibliothèque open source - vous avez accès à leur code. Déterminez comment partager la même file d'attente de répartition. Je n'ai aucune expérience avec cela, mais au moins maintenant vous connaissez les problèmes. Publiez une demande d'aide sur leur site github, ou google cette bibliothèque et «comment partager une file d'attente de répartition» - quelque chose comme ça. –