Iphone de Base de Données s'écraser sur Enregistrer

Je suis en train d'écrire une application Iphone à l'aide de Données de Base et j'ai un EXC_BAD_ACCESS erreur lors de l' [managedObjectContext enregistrer:&&erreur] ligne de code. Ce problème se produit uniquement après que j'ai modifier certains champs. Plus précisément mon entité a deux champs de type chaîne (sur environ 10 domaines), que les valeurs à partir d'un retour d'un modal-vue-contrôleur (comme un éditeur de texte). Le crash aussi ne survient qu'après ces champs sont modifiés, la première fois j'ai mis une valeur en elle fonctionne très bien.

La raison pour laquelle j'ai de la chaîne avec le format de constructeurs avec juste des chaînes est parce que j'essayais de copier construire... ne sais pas si cela se fait automatiquement? La pensée peut-être conserver/libération des messages à partir de ces chaînes (les deux sont de la modal-vue-contrôleur), publié sur le licenciement de l'modal-vue-contrôleur ou quelque chose. Ne crois pas, mais parce que cela ne fonctionne toujours pas.

Voici la section de code qui plante:

[ÉDITÉ]

        - (void)actionSheet:(UIActionSheet *)modalView clickedButtonAtIndex:    (NSInteger)buttonIndex
      switch(buttonIndex) {
              case 0: {
                if(message == nil) {
                  message = [NSEntityDescription insertNewObjectForEntityForName:@"MailMessage" inManagedObjectContext:self.managedObjectContext];
                }
                message.toString = txtTo.text;
                message.fromString = txtFrom.text;
                message.subjectString = txtSubject.text;
                message.backgroundColor = [NSNumber numberWithInt:[bgColor intValue]];
                message.textArray = [NSString stringWithFormat:@"%@", stringTextArray];
                message.htmlString = [NSString stringWithFormat:@"%@", stringHTML];
                message.timeStamp = [NSDate date];
                message.statusCode = [NSNumber numberWithInt:0];
                NSError *error = nil;
                if (![message.managedObjectContext save:&error]) {
                    abort();
                }   
                break;
               }
              case 1: {
             break;
              }
      }
      if(buttonIndex != modalView.cancelButtonIndex) {
      [webViewBody loadHTMLString:@"<html><head></head><body></body></html>" baseURL:[NSURL URLWithString:@""]];
      [self.navigationController popToRootViewControllerAnimated:YES];
}

}

Et voici le rapport de crash:

Type d'Exception: EXC_BAD_ACCESS (SIGBUS) 
Codes d'Exception: KERN_PROTECTION_FAILURE à 0x00000015 
S'Est Écrasé Fil: 0 

Thread 0 Écrasé: 
0 libobjc.Un.dylib 0x30011940 objc_msgSend + 20 
1 CoreData 0x367f7d3e -[NSKnownKeysDictionary1 dealloc] + 82 
2 CoreData 0x367f7cda -[NSKnownKeysDictionary1 de presse] + 34 
3 CoreData 0x3687eec4 -[NSManagedObject(_NSInternalMethods) _setOriginalSnapshot__:] + 40 
4 CoreData 0x36821030 -[NSManagedObjectContext(_NSInternalAdditions) _clearOriginalSnapshotAndInitializerec:] + 16 
5 CoreData 0x368205f2 -[NSManagedObjectContext(_NSInternalAdditions) _didSaveChanges] + 958 
6 CoreData 0x368133bc -[NSManagedObjectContext enregistrer:] + 412 
7 Decome 0x0001fdd6 -[CreateMessageViewController actionSheet:clickedButtonAtIndex:] (CreateMessageViewController.m:163) 
8 UIKit 0x30a6cbd8 -[UIActionSheet(Privé) _buttonClicked:] + 256 
9 CoreFoundation 0x30256dd4 -[NSObject performSelector:withObject:withObject:] + 20 
10 UIKit 0x3096e0d0 -[UIApplication sendAction:à:de:forEvent:] + 128 
11 UIKit 0x3096e038 -[UIApplication sendAction:toTarget:fromSender:forEvent:] + 32 
12 UIKit 0x3096e000 -[UIControl sendAction:: forEvent:] + 44 
13 UIKit 0x3096dc58 -[UIControl(Interne) _sendActionsForEvents:withEvent:] + 528 
14 UIKit 0x309a6e9c -[UIControl touchesEnded:withEvent:] + 452 
15 UIKit 0x309a60d4 -[UIWindow _sendTouchesForEvent:] + 520 
16 UIKit 0x309a5464 -[UIWindow sendEvent:] + 108 
17 UIKit 0x30936e3c -[UIApplication sendEvent:] + 400 

Toute aide est appréciée, Merci.

Mise à JOUR: Même, même si le programme se bloque, quand je l'ouvre sauvegarder les données ont été correctement sauvegardés. Ainsi, le EXC_BAD_ACCESS doit se produire après l'enregistrer a obtenu au moins assez loin pour stocker dans le magasin persistant, je pense.

Si j'en commentaire le enregistrer en ligne, le code fonctionne très bien maintenant. Mais il ne suffit pas à sauver après que j'ai fermer et quitter. Si je lance le enregistrer en ligne dans ma Vue de la Racine de Contrôleurs willAppear fonction, il lance le même EXC_BAD_ACCESS erreur. La console ne veut rien dire d'autre que EXC_BAD_ACCESS
si je fais un backtrace j'obtiens :

#0 0x30011940 dans objc_msgSend () 
#1 0x367f7d44 en[NSKnownKeysDictionary1 dealloc] () 
#2 0x367f7ce0 en[NSKnownKeysDictionary1 release] () 
#3 0x3687eeca en[NSManagedObject(_NSInternalMethods) _setOriginalSnapshot__:] () 
#4 0x36821036 en[NSManagedObjectContext(_NSInternalAdditions) _clearOriginalSnapshotAndInitializerec:] () 
#5 0x368205f8 en[NSManagedObjectContext(_NSInternalAdditions) _didSaveChanges] () 
#6 0x368133c2 en[NSManagedObjectContext enregistrer:] () 
#7 0x0000314e en[RootViewController viewWillAppear:] (auto=0x11b560, _cmd=0x3014ecac, animé=1 '
#0 0x30011940 dans objc_msgSend () 
#1 0x367f7d44 en[NSKnownKeysDictionary1 dealloc] () 
#2 0x367f7ce0 en[NSKnownKeysDictionary1 release] () 
#3 0x3687eeca en[NSManagedObject(_NSInternalMethods) _setOriginalSnapshot__:] () 
#4 0x36821036 en[NSManagedObjectContext(_NSInternalAdditions) _clearOriginalSnapshotAndInitializerec:] () 
#5 0x368205f8 en[NSManagedObjectContext(_NSInternalAdditions) _didSaveChanges] () 
#6 0x368133c2 en[NSManagedObjectContext enregistrer:] () 
#7 0x0000314e en[RootViewController viewWillAppear:] (auto=0x11b560, _cmd=0x3014ecac, animé=1 '\001') dans /Utilisateurs/inckbmj/Desktop/iphone/Decome/Classes/RootViewController.m:85 
1') dans /Utilisateurs/inckbmj/Desktop/iphone/Decome/Classes/RootViewController.m:85

Désolé, le code n'est pas correctement formaté avant. Lors de ce point de vue contrôleur est créé si il n'est pas un nouveau "message" il est passé d'un message objet obtenu à partir d'un fetchedResultsController comme suit:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    MailMessage *aMessage = (MailMessage *)[fetchedResultsController objectAtIndexPath:indexPath];
    [messageView loadMessage:aMessage viewOnly:NO usingTemplate:NO];
    messageView.managedObjectContext = self.managedObjectContext;
    [self.navigationController pushViewController:messageView animated:YES]; 
}

(le premier jeu de code de la MessageViewController.m fichier qui est la classe qui messsageView est)

Il ne se bloque si je présente mon EditorViewController comme un modal de la vue et de revenir ensuite.
Même si je change l'textArray et htmlString lignes (qui sont les seules choses que les modaux vue affecte):

message.textArray = @"HELLO";
message.htmlString = @"HELLO";

il se bloque toujours. Si j'en commentaire les deux lignes, mais il ne tombe pas en panne.

De sorte qu'il semble qu'il se bloque si je présente une vue modal et puis essayez de modifier la textArray ou htmlString champs de mon NSOManagedObject...

Est ici où je présente le point de vue:

- (void) touchesEnded: (NSSet *) touches withEvent: (UIEvent *) event {
    if(!viewOnly) {
        UITouch *touch = [touches anyObject];
        CGPoint location = [touch locationInView: txtTo];
    location = [touch locationInView: webViewBody];
        if(CGRectContainsPoint(webViewBody.bounds, location)) {
            [editor loadTextArrayString:stringTextArray];
            [self presentModalViewController:editor animated:YES];
        }
    }
}

et où je le rejeter:

-(void)returnWithTextArray:(NSString *)arrayString HTML:(NSString *)html bgColor:(NSNumber *)numColor {
    [self dismissModalViewControllerAnimated:YES];
    self.stringTextArray = [NSString stringWithFormat:@"%@", arrayString];
    self.stringHTML = [NSString stringWithFormat:@"%@", html];
    self.bgColor = [NSNumber numberWithInt:[numColor intValue]];
    [webViewBody loadHTMLString:self.stringHTML baseURL:[NSURL URLWithString:@""]];
}
Peut-être que vous pouvez mettre en commentaire l'évolution de certaines de vos attributs d'abord, et de les essayer un par un, pour voir ce qui cause le crash après modifiée et enregistrée.
Il ne semble pas être causée par l'un des champs, je pense que ça doit être dû à la présentation de la modale de vue... Mais je n'ai aucune idée pourquoi. Tout ce que je suis en train de faire est de présenter le point de vue, et ensuite de le rejeter...
Je pense que vous pourriez être à la recherche à la mauvaise zone. 1. Commentaire de TOUTES les données de base enregistrer le code ci-dessus. ou il suffit d'ajouter un "retour" appel au très haut, donc ce code ne s'exécute. TEST de Crash. 2. Si le plantage ne se produit pas, OK, il doit être dans la base de données. Tout faire, mais ne pas appeler la fonction save, depuis quelques lignes. 3. Nous montrer l'ensemble du lot de code pour cette fonction que je me demande comment vous remplissez le message si il n'est pas nul. 4. Qu'est-ce que la console en disant. Il devrait vous donner un peu plus de détails sur ce qui s'est passé.
Édité mon post pour y inclure plus de code. Il ne plante pas si j'en commentaire le sauver. J'exécute le même code si le message n'est pas nul, il serait juste de modifier l'objet MailMessage j'ai passé lorsque le contrôleur a été poussé. Toutes les console dit est EXC_BAD_ACCESS.

OriginalL'auteur kiyoshi | 2009-08-05