1

我正在运行最新的 XCode (4.5.1) 和 ios 模拟器 5.1。所以这就是问题所在,我在一个核心数据模型中有两个实体,以及代表它们的两个 tableviewcontrollers。我想设置两个 NSFetchedResultsControllers(每个 tableviewcontroller 一个),它们都在相同的上下文中工作,但在不同的实体上工作。当我创建第一个时,一切都很好,但是在 initWithFetchRequest: 方法中创建第二个强制 EXC_BAD_ACCESS。我可以提供使用的代码,但我相信这里没有必要。基本上,这是可能的,如果不是,那么我希望看到一个更好的解决方案来解决我的问题。编辑:代码:

showController.context = managedObjectContext;

self.showcaseController = [[UINavigationController alloc]initWithRootViewController:showController];
self.showcaseController.tabBarItem.title = @"Витрина";

categoryController = [[UMCategoriesController alloc] initWithNibName:@"UMCategoriesController" bundle:nil];
categoryController.context = managedObjectContext;

self.categoriesController = [[UINavigationController alloc]initWithRootViewController:categoryController];

所以基本上我有一个 UITabBarController 填充了两个 UINavigationController,每个都以 UIViewController 开头,每个都带有 UITableView。我只是设置了在 AppDelegate 中创建的 NSManagedObjectContext。这是 UMShowcaseController.m NSFetchedResultsController 的设置器。当我只在这里使用 NSFetchedResultsController 时,这非常有效。

-(NSFetchedResultsController *) frc
{
if (_frc != nil)
{
    return _frc;
}
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:[NSEntityDescription entityForName:@"Goods" inManagedObjectContext:context]];
_frc = [[NSFetchedResultsController alloc] initWithFetchRequest:request managedObjectContext:context sectionNameKeyPath:nil cacheName:nil];
_frc.delegate = self;
NSError __autoreleasing *error = nil;

if (![_frc performFetch:&error]) {
}
return _frc;
}

但是,当我将 NSFetchedResultsController 添加到第二个 UIViewController 时,UMCategoriesView - 它崩溃了。

if (_frc != nil)
{
    return _frc;
}
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:[NSEntityDescription entityForName:@"Categories" inManagedObjectContext:context]];
_frc = [[NSFetchedResultsController alloc] initWithFetchRequest:request managedObjectContext:context sectionNameKeyPath:nil cacheName:nil]; //here it fails
_frc.delegate = self;
NSError __autoreleasing *error = nil;

if (![_frc performFetch:&error]) {
}
return _frc;
4

1 回答 1

0

该死的我。这里唯一缺少的是第二个 NSFetchedResultsController 中的排序描述符。重新阅读文档后一切正常。

阅读文档,不要忘记设置排序描述符。

Martin,感谢您的评论,是您让我重新阅读了文档。

于 2012-10-11T11:35:49.570 回答