0

Я использую магическую запись для извлечения данных из основных данных, используя код:Выборка данных по определенному Entity

- (NSFetchedResultsController *)fetchedResultsController { 
    if (!_fetchedResultsController) { 
     _fetchedResultsController = [TagItem MR_fetchAllGroupedBy:nil withPredicate:nil sortedBy:@"name" ascending:YES delegate:self]; 
    } 

    return _fetchedResultsController; 
} 

Проблема заключается в том, что заполняемый контроллер вида таблицы, которая выталкивается в другой таблице так что в основном пользователь выбирает параметр, который переводит человека в список данных, но данные в этом параметре относятся к этой опции. Поэтому я хочу извлечь только данные, которые назначены этому параметру, а не просто отображать все доступные данные. Мой метод выше позволяет мне получить все данные, а не выбирать конкретные данные в соответствии с опцией. Данные в пределах опции даются objectId самого параметра как объекта и, таким образом, обеспечивают взаимосвязь между ними.

Так что мой вопрос в том, как мне собираться получать данные в соответствии с определенной сущностью, используя магическую запись?

UPDATE

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

- (NSFetchedResultsController *)fetchedResultsController { 
    if (!_fetchedResultsController) { 
     NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name = test"]; 
     _fetchedResultsController = [TagItem MR_fetchAllGroupedBy:nil withPredicate:predicate sortedBy:@"name" ascending:YES delegate:self]; 
    } 



return _fetchedResultsController; 

}

ошибка, как показано ниже, хотя я точно знаю, есть элемент данных с именем теста хранятся, тем не менее, это не похоже на работу.

'NSInvalidArgumentException', причина: 'Невозможно создать SQL для предиката (имя == тест) (проблема на РИТ)'

+0

Неверное цитирование в вашем тестовом предикате: '[NSPredicate predicateWithFormat: @" name = 'test' "]' или лучше: '[NSPredicate predicateWithFormat: @" name =% @ ", @" test "]'. –

ответ

4

Вот что параметр withPredicate для:

NSPredicate *predicate = ... // predicate that filters the items to display 
_fetchedResultsController = [TagItem MR_fetchAllGroupedBy:nil withPredicate:predicate ...]; 

Например , если TagItem имеет однозначное соотношение person к Person, то

Person *person = ...; // person selected in the first view controller 
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"person = %@", person]; 
_fetchedResultsController = [TagItem MR_fetchAllGroupedBy:nil withPredicate:predicate ...]; 

доставит все предметы, связанные с этим человеком.

+0

Итак, я понимаю, что вы не можете просто ввести имя сущности в предикат. Большое спасибо, он работает, если я так делаю! : D –

+0

@AlexSaidani: Вы можете (с правом цитирования), см. Мой комментарий к вашему вопросу. –

+0

Он не связан с указанным выше вопросом, но который будет быстрее: - Выполнение предиката, в котором человек = {персональный объект} или person.field = {some value}? Мое личное мышление заключается в том, что второй вариант будет быстрее, поскольку Core Data нужно сравнить только одно поле, тогда как для первого кода он будет сравнивать все свойства. Тем не менее, я не уверен – Max

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