带有 EXC_BAD_ACCESS 的 Core Data deleteObject 应用程序崩溃
Posted
技术标签:
【中文标题】带有 EXC_BAD_ACCESS 的 Core Data deleteObject 应用程序崩溃【英文标题】:Core Data deleteObject crashing app with EXC_BAD_ACCESS 【发布时间】:2010-11-10 07:54:57 【问题描述】:我正在从我的 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
【问题讨论】:
【参考方案1】:此时我唯一的猜测是,您可能正在删除与另一个对象具有必需关系的对象。检查数据模型中的关系?
完全是一种预感。
【讨论】:
以上是关于带有 EXC_BAD_ACCESS 的 Core Data deleteObject 应用程序崩溃的主要内容,如果未能解决你的问题,请参考以下文章
带有 UIImagePickerController 和 UIPopoverController 的 exc_bad_access
带有 NSManagedObject 的 EXC_BAD_ACCESS
带有变量的 NSFont 文本大小:EXC_BAD_ACCESS(代码=1,地址=0X3)