У меня есть NSArrayController, companiesController
, связанный с объектом Core Data верхнего уровня, Companies
.Использование NSPredicate с основными данными для глубоких связей
A Company
имеет большое количество Department
, и Department
имеет множество Employee
; они представлены отношениями 1-ко-многим, departments
и employees
.
на основе атрибута salary
в качестве Employee
я думал, что я мог бы сделать это динамически для фильтрации на основе заработной платы внутри метода UI называемый:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY departments.employees.salary < %@", [NSNumber numberWithInt:23000]];
[companiesController setFilterPredicate:predicate];
Увы, это дает мне ошибку: -[NSCFSet compare:]: unrecognized selector sent to instance
.
Спасибо, это работает. Похоже, это обходной путь, но это только проблемы с Core Data, я думаю. – raheel
Я бы предположил, что это имеет какое-то отношение к тому, как Core Data переводит NSPredicate в инструкции SQLite. Синтаксис неоднозначен: вы имеете в виду ЛЮБОЕ или ВСЕ сотрудников (сотрудников) в конкретном отделе. Кроме того, я являюсь новичком SQL, но я предполагаю, что даже если ваш первоначальный предикат можно сделать в простом SQL-заявлении, для этого потребуется потенциально большое объединение, которое Apple может считать слишком большой или интенсивной для одной выборки. – gerry3
Кроме того, я потратил немало времени на это, так что голосование будет оценено :-). – gerry3