好吧,ios 6核心数据“CoreData:错误:严重的应用程序错误。”
这是我有史以来第一篇文章。几小时后,我一直在头撞墙。我讨厌输入问题;你可以相信我已经彻底试图找出自己的想法。我对以下错误做了一些研究,但是我仍然无法解决它。这就是说,我是noob iOS 6开发人员,并且在核心数据方面存在问题。错误是:
“CoreData:错误:严重的应用程序错误,在核心数据更改处理过程中发生异常,这通常是NSManagedObjectContextObjectsDidChangeNotification观察者中的一个错误,ALL或ANY操作符的左侧必须是NSArray或NSSet与用户信息(空)“
现在,我的数据模型如下:我有两个实体(一对多关系)。这种关系是行为 - >事件,其中有0个事件发生的未绑定事件。
我做的是这个;
在行为表视图控制器,我填充一个NSFetchedResultsController类似如下:
- (NSFetchedResultsController *)fetchedResultsController {
NSLog(@"Started Fetching In Behaviors...");
if (fetchedResultsController != nil) {
return fetchedResultsController;
}
AppDelegate *appDelegate =
[[UIApplication sharedApplication] delegate];
NSManagedObjectContext *context =
[appDelegate managedObjectContext];
NSEntityDescription *entityDesc =
[NSEntityDescription entityForName:@"Behavior"
inManagedObjectContext:context];
[fetchRequest setEntity:entityDesc];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:NO];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[fetchRequest setSortDescriptors:sortDescriptors];
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:context sectionNameKeyPath:nil cacheName:nil];
aFetchedResultsController.delegate = self;
self.fetchedResultsController = aFetchedResultsController;
return fetchedResultsController;
}
所有这一切工作正常,虎背熊腰,脚蹬dory的。表填充没有问题。现在,当选择一个单元格我做什么,我实例化另一个UITableViewCell的控制器,
{
NSLog(@"A value was selected from the table view");
IncidentsViewController *vc = [[IncidentsViewController alloc] initWithStyle:UITableViewStylePlain];
vc.managedObject = [self.fetchedResultsController objectAtIndexPath:indexPath];
vc.parentRelationship = [self.fetchedResultsController objectAtIndexPath:indexPath];
NSLog(@"Managed set on Incidents View Controller: %@", vc.managedObject);
NSString* name = [[NSString alloc] initWithString:[[vc.managedObject valueForKey:@"name"] description]];
NSLog(@"Name of selected object: %@", name);
[self.navigationController pushViewController:vc animated:YES];
}
从上面下IncidentsViewController具有基本上完全相同的fetchedResultsController。我将粘贴它的完整性。
- (NSFetchedResultsController *)fetchedResultsController2 {
NSLog(@"Started Fetching Resuts from Incidents View Controller...");
if (fetchedResultsController2 != nil) {
NSLog(@"fetchedResultsController not null");
return fetchedResultsController2;
}
AppDelegate *appDelegate =
[[UIApplication sharedApplication] delegate];
NSManagedObjectContext *context =
[appDelegate managedObjectContext];
NSEntityDescription *entityDesc =
[NSEntityDescription entityForName:@"Incident"
inManagedObjectContext:context];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setEntity:entityDesc];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"when" ascending:NO];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[fetchRequest setSortDescriptors:sortDescriptors];
NSLog(@"parent relationship: %@", self.parentRelationship);
NSLog(@"managed object: %@", self.managedObject);
[fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"ANY relationship == %@", self.parentRelationship]];
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:context sectionNameKeyPath:nil cacheName:nil];
aFetchedResultsController.delegate = self;
self.fetchedResultsController2 = aFetchedResultsController;
/*
self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil cacheName:nil];
self.fetchedResultsController.delegate = self;
*/
NSLog(@"Ending fetching results from incidents controller...");
return fetchedResultsController2;
}
我的问题很简单如下:当我有行
[fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"ANY relationship == %@", self.parentRelationship]];
在第二个视图控制器,一切都被在表中填写正确的(即仅用于为特定的行为事件选择出现在列表中,如果这条线存在,并且我尝试向Incidents实体添加一条新记录,则抛出上面的错误,如果我删除了这条特定行,每一行都出现在列表中但是,当我尝试向事件表添加某些内容时,该错误实际上是在BehaivorViewController中引发的;这是非常令人惊讶,因为我实例化了新的NSFetchedResultsController,AppDelegate和NSManagedObjectContext,它们对于每个相应的视图控制器都是特定的本地的。在我看来,这两个是相互关联的,虽然我似乎无法弄清楚。是否有可能对知道一些关于核心数据的人有所了解。我已为我的完整的项目到以下网址:
https://webshare.uchicago.edu/users/dansully/Public/Dirty.zip
有问题的线是线310 IncidentsViewController.m。
非常感谢您帮助我回答我的问题。我将继续努力,如果我找到解决方案,我会报告回来。
+1 yep。这是实际的问题。 – 2013-03-14 08:42:07
给那个人一支雪茄。 – dps 2013-03-14 15:52:56