gpt4 book ai didi

ios 6核心数据 "CoreData: error: Serious application error."

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:48:48 24 4
gpt4 key购买 nike

好的,

这是我在 stackoverflow 上发表的第一篇文章。几个小时以来,我一直在用头撞墙。我讨厌输入问题;你可以相信我已经竭尽全力地尝试自己解决这个问题。我对以下错误进行了一些研究,但仍然无法解决。话虽这么说,我是一个新手 ios 6 开发人员,并且对核心数据有疑问。错误是:

“CoreData: error: Serious application error. Exception was catched during Core Data change processing. 这通常是 NSManagedObjectContextObjectsDidChangeNotification 观察者中的错误。ALL 或 ANY 运算符的左侧必须是 NSArray 或 NSSet . 与 userInfo (null)"

现在,我的数据模型如下:我有两个实体(一对多关系)。关系是行为 -> 事件,其中事件的发生次数为 0 到无限。

我做的是这个;

在行为 TableView Controller 中,我填充了一个 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;

}

所有这一切都很好用。该表得到填充没有问题。现在,当一个单元格被选中时,我将实例化另一个 UITableViewCell Controller ,

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

在第二个 View Controller 中,所有内容都正确填充到表中(即只有选定的特定行为的事件出现在列表中。如果存在这一行,我会尝试向事件添加新记录entity, 上面的错误被抛出。如果我删除这个特定的行,每个行为都会出现在列表中(这是可以预料的)。但是,当我尝试向事件表中添加一些东西时,实际上会抛出错误在 BehaivorViewController 中;这让我感到非常惊讶,因为我实例化了新的 NSFetchedResultsController、AppDelegate 和 NSManagedObjectContext,它们对于每个 View Controller 都是特定本地的。在我看来,这两者在某种程度上是相互关联的,尽管我似乎无法理解弄清楚怎么做。是否有可能让对核心数据了解一点的人插话一下。我已经将我的完整项目发布到以下 URL:

https://webshare.uchicago.edu/users/dansully/Public/Dirty.zip

有问题的行是 IncidentsViewController.m 中的第 310 行。

非常感谢您帮我回答我的问题。我将继续努力,如果我找到解决方案,我会报告。

最佳答案

如果 Incident 只能有零个或一个父级关系,您可能想尝试从谓词中删除 ANY。这是代码:

[fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"relationship == %@", self.parentRelationship]];

关于ios 6核心数据 "CoreData: error: Serious application error.",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15403524/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com