2013-09-17 2 views
1

У меня есть панель поиска и некоторые фильтры в моем приложении, которые создают два предиката. Один для строки в строке поиска и один для фильтра (UISegmentedControl).NSManagedObjectContext -save: сбой при использовании NSPredicate

Когда предикаты используются и вставить один объект в контекст, а затем вызвать -save: в приложение вылетает с:

CoreData: error: Serious application error. Exception was caught during Core Data change processing. This is usually a bug within an observer of NSManagedObjectContextObjectsDidChangeNotification. Can't use in/contains operator with collection 1379410732 (not a collection) with userInfo (null) 

в точке сохранения: point of crash (SIGABRT)

Это не происходит, когда предикаты не используются. Могу ли я как-то удалить предикаты во время сохранения? Я уже пробовал это, получив NSFetchRequest, но я не могу установить его обратно на контроллер.

Редактировать

Я также попытался добавить self в качестве наблюдателя на NSManagedObjectContextDidSaveNotification, а затем использовать -mergeChangesFromContextDidSaveNotification: как одно обсуждение на SO предложил. Это тоже не помогло.

+0

Возможно, покажите предикаты? –

+0

Спасибо, Мартин, я только что нашел проблему. Решение все еще имеет запутанную часть, но авария исправлена. И ты был прав, это был предикат. –

ответ

0

Я нашел свою проблему. Это было довольно просто, но сообщение об ошибке было настолько запутанным, что я не смотрел на правильную точку.

Проблема была в том, что я использовал [NSPredicate predicateWithFormat:@"number CONTAINS[cd] %@", string].

Таким образом, предикат использовал CONTAINS на NSNumber. Запутанная часть состоит в том, что предикаты работают при запросе существующих данных из базы данных. Я до сих пор не понимаю эту часть, но теперь она работает с компаратором ==.

Смежные вопросы