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

相關問題