2

我现在面临一个有趣的问题,我的应用程序TableViewControllers NSFetchedResultsControllers一个搜索添加新条目。首先,应用程序的前提很简单:导航栏中带有加号按钮的表格视图控制器;用户按下加号,视图控制器以模态方式出现。用户添加一个名称,数量及活动,冲床保存并通过NSFetchedResultsController和核心数据,这些信息被成功地填充背在表视图控制器。iOS应用崩溃时之后使用核心数据和

工作得非常好。 TableViewController也使用SearchBar,以便用户可以在Table View中搜索名称或事件。

的问题是:

如果在表视图中条目的用户搜索(并没有抵消搜索),然后按下添加按钮添加一个条目,填补了信息和印刷机保存,应用程序崩溃与下面的错误:

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

我明白发生了什么,但我不完全知道如何去修复它。错误似乎是很常见的,并有大量的修复在那里的,所有与轻微调整谓词,但我不知道该拿这个哪个方向。

我加入我的模型以获得更多信息的视图中。

enter image description here 对此的任何援助将大规模赞赏。

编辑:我通过故事板而不是代码呈现视图控制器,但根据TheEye的评论,实际上只是清除代码中的搜索并手动呈现视图控制器可能会更容易。我正在研究探索这个方向。如果“ANY”与一对一关系,而不是一个一对多 关系中使用发生

+0

为什么在用户按下+按钮之前,您不要自己取消搜索?在呈现数据输入屏幕之前? – TheEye

+0

谢谢@TheEye - 我从故事板中以模态方式呈现它,而不是代码..但是我确实想过调整它,所以我将它从代码中展示出来,因为这将是解决此问题的简单方法..我会看看现在 – amitsbajaj

回答

5

即错误。例如,如果“机会”是第二个谓语一个一对一的关系,那么你必须 取代

@"ANY occasion.title CONTAINS[c] %@" 

通过

@"occasion.title CONTAINS[c] %@" 

+0

感谢您的答复马丁 - 这是非常有益的。我很抱歉没有提到早些时候,但是场合和whoBy都是一对多的关系,并且从谓词中删除ANY这个词,我仍然遇到同样的崩溃。 – amitsbajaj

+0

@amitsbajaj:根据你的模型的图像,* *“whoBy”和“场合”是*一对*关系。 –

+0

道歉 - 马丁 - 我错误地阅读了关系的方向。你说的是正确的,但我仍然被怪异地提出了相同的错误 – amitsbajaj

相关问题