Dados do Core do iPhone quebrando em Salvar

No momento, estou escrevendo um aplicativo do Iphone usando o Core Data e recebo umEXC_BAD_ACCESS erro durante a linha de código [managedObjectContext save: && error]. Esse acidente só acontece depois de modificar certos campos. Mais especificamente, minha entidade possui dois campos de cadeia (de cerca de 10 campos), que obtêm seus valores de um retorno de um controlador de modo restrito (como um editor de texto). O acidente também só acontece depois que esses campos são editados, a primeira vez que coloco um valor nele funciona bem.

A razão que eu tenho string com construtores de formato com apenas seqüências de caracteres é porque eu estava tentando copiar construir ... não tenho certeza se isso acontece automaticamente? Pensei que talvez reter / liberar mensagens daquelas strings (aquelas duas são do controlador de view modal), estavam sendo liberadas na demissão do controlador de view modal ou algo do tipo. Acho que não, porque ainda não funciona.

Aqui está a seção do código que está falhando:

[EDITADO]

        - (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];
}

}

E aqui está o log de acidentes:

Exception Type:  EXC_BAD_ACCESS (SIGBUS)
Exception Codes: KERN_PROTECTION_FAILURE at 0x00000015
Crashed Thread:  0

Thread 0 Crashed:
0   libobjc.A.dylib                 0x30011940 objc_msgSend + 20
1   CoreData                        0x367f7d3e -[NSKnownKeysDictionary1 dealloc] + 82
2   CoreData                        0x367f7cda -[NSKnownKeysDictionary1 release] + 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 save:] + 412
7   Decome                          0x0001fdd6 -[CreateMessageViewController actionSheet:clickedButtonAtIndex:] (CreateMessageViewController.m:163)
8   UIKit                           0x30a6cbd8 -[UIActionSheet(Private) _buttonClicked:] + 256
9   CoreFoundation                  0x30256dd4 -[NSObject performSelector:withObject:withObject:] + 20
10  UIKit                           0x3096e0d0 -[UIApplication sendAction:to:from:forEvent:] + 128
11  UIKit                           0x3096e038 -[UIApplication sendAction:toTarget:fromSender:forEvent:] + 32
12  UIKit                           0x3096e000 -[UIControl sendAction:to:forEvent:] + 44
13  UIKit                           0x3096dc58 -[UIControl(Internal) _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

Qualquer ajuda é apreciada, obrigado.

UPDATE: Além disso, mesmo que o programa trava, quando abri-lo de volta, os dados foram salvos corretamente. Portanto, o EXC_BAD_ACCESS deve acontecer depois que o salvamento for obtido, pelo menos, o suficiente para armazenar no armazenamento persistente que eu acho.

Se eu comentar a linha de salvar, o código corre bem agora. Mas não salva depois que eu fecho e saio. Se eu executar a linha de salvaguarda na função ControlAllAppear de Controladores de Visualização Raiz, lança o mesmo erro EXC_BAD_ACCESS. O console não diz nada além de EXC_BAD_ACCESS se eu fizer um backtrace:

#0  0x30011940 in objc_msgSend ()
#1  0x367f7d44 in -[NSKnownKeysDictionary1 dealloc] ()
#2  0x367f7ce0 in -[NSKnownKeysDictionary1 release] ()
#3  0x3687eeca in -[NSManagedObject(_NSInternalMethods) _setOriginalSnapshot__:] ()
#4  0x36821036 in -[NSManagedObjectContext(_NSInternalAdditions) _clearOriginalSnapshotAndInitializeRec:] ()
#5  0x368205f8 in -[NSManagedObjectContext(_NSInternalAdditions) _didSaveChanges] ()
#6  0x368133c2 in -[NSManagedObjectContext save:] ()
#7  0x0000314e in -[RootViewController viewWillAppear:] (self=0x11b560, _cmd=0x3014ecac, animated=1 '\001') at /Users/inckbmj/Desktop/iphone/Decome/Classes/RootViewController.m:85

Desculpe, o código não foi formatado corretamente antes. Quando este view controller é criado se não é uma nova "mensagem", é passado um objeto de mensagem obtido de um fetchedResultsController da seguinte forma:

- (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]; 
}

(o primeiro conjunto de código é do arquivo MessageViewController.m, que é a classe que o messsageView é)

Ele só falha se eu apresentar meu EditorViewController como uma exibição restrita e, em seguida, retornar. Mesmo se eu alterar as linhas textArray e htmlString (que são as únicas coisas que a exibição restrita afeta) para:

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

ainda falha. Se eu comentar as duas linhas no entanto, ele não falha.

Portanto, parece que ele falha se eu apresentar uma exibição restrita e, em seguida, tentar editar os campos textArray ou htmlString do meu NSOManagedObject ...

Aqui é onde eu apresento a visão:

- (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];
        }
    }
}

e onde eu descarto:

-(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:@""]];
}

questionAnswers(6)

yourAnswerToTheQuestion