我現在面臨一個有趣的問題,我的應用程序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