【发布时间】:2011-11-18 06:43:42
【问题描述】:
我正在使用core data,并且有一个UITableViewController,它从core data 加载数据。这是modal view,如果我第三次加载模态视图,它会因EXC_BAD_ACCESS 而崩溃。
- (NSFetchedResultsController *)fetchedResultsController {
if (fetchedResultsController != nil) {
return fetchedResultsController;
}
// Create and configure a fetch request
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Ride" inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:entity];
// Create the sort descriptors array
NSSortDescriptor *sectionTitle = [[NSSortDescriptor alloc] initWithKey:@"dateStart" ascending:NO];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sectionTitle, nil];
[fetchRequest setSortDescriptors:sortDescriptors];
// Create and initialize the fetch results controller
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:managedObjectContext sectionNameKeyPath:nil cacheName:@"Root"];
self.fetchedResultsController = aFetchedResultsController;
fetchedResultsController.delegate = self;
// Memory management
[aFetchedResultsController release];
[fetchRequest release];
[sectionTitle release];
[sortDescriptors release];
return fetchedResultsController;
}//end
崩溃表明它来自这一行:
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Ride" inManagedObjectContext:managedObjectContext];
这是在 viewDidLoad 中:
if (managedObjectContext == nil) {
managedObjectContext = [MyAppDelegate instance].managedObjectContext;
}
呈现模态视图:
History *history = [[[History alloc] init] autorelease];
UINavigationController *nav = [[[UINavigationController alloc] initWithRootViewController:history] autorelease];
[self presentModalViewController:nav animated:YES];
关闭模式:
- (void)done {
[self dismissModalViewControllerAnimated:YES];
}
提供 EXC_BAD_ACCESS 的堆栈跟踪:
现在,为了使用核心数据设置此视图,我遵循Core Data Books 示例项目,我的代码看起来几乎相同。为什么模态视图加载几次后会崩溃?
【问题讨论】:
-
这段代码看起来不错,但还有其他事情发生。如果您认为它与多次显示模态视图有关,请检查以确保在模态视图被关闭时没有任何内容保留。在战略位置添加一些 NSLog 语句并查看对象 ID 以帮助了解发生了什么。
-
我只是使用 [self dismissModalViewControllerAnimated:YES] 将其关闭,这是一个坏主意吗?我知道苹果有时会做不同的事情。我没有看到任何其他可能导致这种情况的东西......但我更新了我的代码与我呈现和解雇的方式。
-
你能发布崩溃和堆栈跟踪吗?
-
发布了我在崩溃时遇到的堆栈跟踪。
-
您是否在 Xcode 运行方案中启用了 Zombie Objects 以获得有关 EXC_BAD_ACCESS 的更明确信息
标签: objective-c ios core-data nsfetchedresultscontroller nsentitydescription