2010-11-10 4 views
1

Je charge un objet User depuis mon fetchResultsController, obtenant un tas d'objets Sites connexes de cet utilisateur, les plaçant dans un tableau, triant, puis affiché dans un UITableView.Effacement de l'application deleteObject de données de base avec EXC_BAD_ACCESS

-(void)loadMainUser { 

id <NSFetchedResultsSectionInfo> sectionInfo = [[self.fetchedResultsController sections] objectAtIndex:0]; 

if([sectionInfo numberOfObjects]) { 

    NSUInteger indexArr[] = {0,0}; 
    NSIndexPath *indexSet = [NSIndexPath indexPathWithIndexes:indexArr length:2]; 
    mainUser = (User *)[self.fetchedResultsController objectAtIndexPath:indexSet]; 

    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"siteName" ascending:YES selector:@selector(caseInsensitiveCompare:)]; 
    NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:&sortDescriptor count:1]; 

    sortedMsgs = [[mainUser.sitesToUser allObjects] mutableCopy]; 
    [sortedMsgs sortUsingDescriptors:sortDescriptors]; 

    [sortDescriptor release]; 
    [sortDescriptors release];  
} 

[self.theTableView reloadData]; 

} 

Maintenant, mon scénario est que je veux supprimer cet objet utilisateur et sites connexes. Cependant, chaque fois que j'essaie de sauvegarder la suppression, mon application se bloque avec une erreur EXC_BAD_ACCESS. Voici mon code de suppression:

-(void)deleteUser { 

sortedMsgs = nil; 
mainUser = nil; 

NSUInteger indexArr[] = {0,0}; 
NSIndexPath *indexSet = [NSIndexPath indexPathWithIndexes:indexArr length:2]; 

NSManagedObjectContext *context = [self.fetchedResultsController managedObjectContext]; 

[context deleteObject:[self.fetchedResultsController objectAtIndexPath:indexSet]]; 
// Save the context. 

NSError *error = nil; 
if (![context save:&error]) {  
    NSLog(@"Unresolved error %@, %@", error, [error userInfo]); 
    abort(); 
} else {   
    // do something 
} 
} 

Je ne suis pas vraiment pourquoi ... si je remarqué que mon mainUser avait un nombre de retenir 3 que je suppose est à cause des sortedMsgs et UITableView ... Est-ce parce que mon UITableView montre toujours les données de l'utilisateur efficacement, puis je le supprime? Vraiment confus ...

Voici le journal de l'accident:

Exception Type: EXC_BAD_ACCESS (SIGBUS) 
Exception Codes: KERN_PROTECTION_FAILURE at 0x0000000000000016 
Crashed Thread: 0 Dispatch queue: com.apple.main-thread 

Application Specific Information: 
objc_msgSend() selector name: isTemporaryID 
iPhone Simulator 235, iPhone OS 4.2 (iPhone/8C134) 

Thread 0 Crashed: Dispatch queue: com.apple.main-thread 
0 libobjc.A.dylib     0x01613a63 objc_msgSend + 23 
1 CoreData      0x00e20d26 -[NSManagedObjectContext save:] + 566 
2 Clicky       0x00002cfd -[RootViewController deleteUser] + 358 (RootViewController.m:71) 
3 UIKit       0x003eaa6e -[UIApplication sendAction:to:from:forEvent:] + 119 
4 UIKit       0x005f8167 -[UIBarButtonItem(UIInternal) _sendAction:withEvent:] + 156 
5 UIKit       0x003eaa6e -[UIApplication sendAction:to:from:forEvent:] + 119 
6 UIKit       0x004791b5 -[UIControl sendAction:to:forEvent:] + 67 

Répondre

1

Ma seule estimation à ce stade est que vous pouvez supprimer un objet qui a une relation nécessaire à un autre objet. Vérifiez vos relations au sein du modèle de données?

Totalement une intuition.

Questions connexes