我现在面临一个有趣的问题,我的应用程序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];
}
我明白发生了什么,但我不完全知道如何去修复它。错误似乎是很常见的,并有大量的修复在那里的,所有与轻微调整谓词,但我不知道该拿这个哪个方向。
我加入我的模型以获得更多信息的视图中。
对此的任何援助将大规模赞赏。
编辑:我通过故事板而不是代码呈现视图控制器,但根据TheEye的评论,实际上只是清除代码中的搜索并手动呈现视图控制器可能会更容易。我正在研究探索这个方向。如果“ANY”与一对一关系,而不是一个一对多 关系中使用发生
为什么在用户按下+按钮之前,您不要自己取消搜索?在呈现数据输入屏幕之前? – TheEye
谢谢@TheEye - 我从故事板中以模态方式呈现它,而不是代码..但是我确实想过调整它,所以我将它从代码中展示出来,因为这将是解决此问题的简单方法..我会看看现在 – amitsbajaj