ios - 使用 EXC_BAD_ACCESS 的核心数据 deleteObject 崩溃应用程序

标签 ios iphone cocoa-touch core-data

我正在从我的 fetchResultsController 加载一个 User 对象,从所述 User 获取一堆相关的 Sites 对象,将它们放入一个数组中,排序,然后显示在 UITableView 中。

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

}

现在我的方案是我想删除这个用户对象和相关站点。但是,每当我尝试保存删除时,我的应用程序都会因 EXC_BAD_ACCESS 错误而崩溃。这是我的删除代码:

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

但我不完全确定为什么...我注意到我的 mainUser 的保留计数为 3,我认为这是因为 sortedMsgs 和 UITableView...是否因为我的 UITableView 仍在有效地显示数据用户,然后我删除它?真的很迷茫……

这是崩溃日志:

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

最佳答案

此时我唯一的猜测是,您可能正在删除一个与另一个对象具有必需关系的对象。检查数据模型中的关系?

完全是预感。

关于ios - 使用 EXC_BAD_ACCESS 的核心数据 deleteObject 崩溃应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4142295/

相关文章:

CALayers drawInContext 中的 iOS 绘图在视网膜上像素化或模糊

ios - UITableView.automaticDimension 高度即将到来 -1

ios - 如何确定从外部didSelectRowAtIndexPath(Objective-C)在UITableView中选择了哪些行

ios - 数组或 CGImageRef 的内存泄漏

iphone - 连接到 ViewController.h 的圆形矩形按钮

ios - 更改网站宽度以符合 UIWebView

objective-c - 在远程通知中添加文本字段,iOS 8

ios - ScrollView 向上移动一个 uitextfield 而不是其他

iphone - iOS5无法自定义标签栏

objective-c - NSLocalizedString - 使用未声明的标识符问题