在使用核心数据和NSFetchedResultsController使用TableViewController进行搜索后添加新条目时,iOS应用程序崩溃

在使用核心数据和NSFetchedResultsController使用TableViewController进行搜索后添加新条目时,iOS应用程序崩溃,ios,core-data,uisearchbar,nspredicate,nsfetchedresultscontroller,Ios,Core Data,Uisearchbar,Nspredicate,Nsfetchedresultscontroller,我的应用程序面临一个有趣的问题。首先,该应用程序的前提很简单:一个在导航栏中带有加号按钮的表视图控制器;用户按下加号,视图控制器以模式显示。用户添加名称、金额和事件,按save键,并通过NSFetchedResultsController和Core Data将该信息成功填充回表视图控制器 这很有效。TableViewController还使用搜索栏,以便用户可以在表视图中搜索名称或事件 问题是: 如果用户在表视图中搜索条目(且未取消搜索),然后按“添加”按钮添加条目,填写信息并按“保存”,应用程

我的应用程序面临一个有趣的问题。首先,该应用程序的前提很简单:一个在导航栏中带有加号按钮的表视图控制器;用户按下加号,视图控制器以模式显示。用户添加名称、金额和事件,按save键,并通过NSFetchedResultsController和Core Data将该信息成功填充回表视图控制器

这很有效。TableViewController还使用搜索栏,以便用户可以在表视图中搜索名称或事件

问题是:

如果用户在表视图中搜索条目(且未取消搜索),然后按“添加”按钮添加条目,填写信息并按“保存”,应用程序将崩溃,错误如下:

CoreData: error: Serious application error.  Exception was caught during Core Data change processing.  This is usually a bug within an observer of NSManagedObjectContextObjectsDidChangeNotification.  The left hand side for an ALL or ANY operator must be either an NSArray or an NSSet. with userInfo (null)
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'The left hand side for an ALL or ANY operator must be either an NSArray or an NSSet.'
但是,如果用户确实从表视图中取消了搜索,然后添加了一个新条目,则不会崩溃。这是我需要解决的问题,因为某些工作流可能不需要在添加新条目之前取消搜索

表视图中的NSFetchedResultsController具有以下谓词:

if ([self.timelineSearchBar.text length] > 0) {
    NSPredicate *predName = [NSPredicate predicateWithFormat:@"ANY whoBy.name CONTAINS[c] %@", self.timelineSearchBar.text];
    NSPredicate *predOccasion = [NSPredicate predicateWithFormat:@"ANY occasion.title CONTAINS[c] %@", self.timelineSearchBar.text];

    // creating the orCompoundPredicate for the two conditions
    NSPredicate *compPredicate = [NSCompoundPredicate orPredicateWithSubpredicates:@[predName, predOccasion, predDate]];
    [fetchRequest setPredicate:compPredicate];
}
我理解正在发生的事情,但我不完全确定如何着手解决它。这个错误似乎很常见,而且有很多修复方法,都与稍微调整谓词有关,但我不确定该朝哪个方向去做

我正在添加我的模型视图,以获取更多信息

在此方面的任何帮助都将不胜感激

编辑:我通过故事板而不是代码显示视图控制器,但根据TheEye的评论,实际上只需清除代码中的搜索并手动显示视图控制器可能更容易。我正在探索这一点作为前进的方向

如果将“ANY”与对一关系而不是对多关系一起使用,则会发生该错误 关系例如,如果“场合”是一对一的关系,那么你必须 替换


在第二个谓词中。

在显示数据输入屏幕之前,当用户按下+按钮时,您为什么不自己取消搜索?谢谢@TheEye-我是从故事板而不是代码中以模式显示的。。但我确实考虑过调整它,所以我从代码中演示它,因为这是一种简单的修复方法。。我现在就来调查一下。谢谢你的回复,马丁,这很有帮助。我很抱歉没有在前面提到这一点,但场合和whoBy都是对许多关系,而且从谓词中删除单词ANY后,我仍然会遇到同样的问题。@amitsbajaj:根据您模型的图像,“whoBy”和“场合”是一对一的关系。道歉马丁-我误解了这段关系的方向。你说的没错,但我仍然在同一个场景中遇到同样的错误weirdly@amitsbajaj:您是否删除了两个谓词中的“ANY”?错误消息清楚地提到“…所有或任何操作符…”。谢谢Martin-我不确定那里发生了什么,因为它一直崩溃,我已经从两个谓词中删除了任何一个,但是关闭Xcode并重新打开就成功了。这个问题现在已经解决了。感谢您的及时协助!
@"ANY occasion.title CONTAINS[c] %@"
@"occasion.title CONTAINS[c] %@"