NSFetchRequest возвращает объект при первом запуске, но не в последующие разы

#core-data #nsfetchrequest

#основные данные #nsfetchrequest

Вопрос:

У меня есть набор объектов, и для каждого объекта в этом наборе я вызываю метод, внутри которого есть NSFetchRequest . Этот NSFetchRequest используется для извлечения объекта на основе идентификатора, который передается в метод. Для каждого из моих объектов я вызываю этот метод, если идентификатор используется в предикате NSFetchRequest в первый раз, он возвращает правильный объект, каждый раз после этого, если этот идентификатор используется снова, он возвращает nil. Я очень смущен этим и ничего не могу найти о том, почему это происходит или что я делаю неправильно. Любая помощь будет принята с благодарностью.

Вот код для моего NSFetchRequest:

 NSFetchRequest *request = [[NSFetchRequest alloc] init];

[request setEntity:[NSEntityDescription entityForName:@"Styles" inManagedObjectContext:[self managedObjectContext]]];

[request setPredicate:[NSPredicate predicateWithFormat:@"style_id == %@", style_id]];

NSError *error = nil;

Styles *r_styles = [[[self managedObjectContext] executeFetchRequest:request error:amp;error] lastObject];

[request release]; 
  

Ответ №1:

Я разобрался со своей проблемой. Я передавал свой идентификатор как NSString, когда я должен был передавать его как NSNumber. Изменение его на NSNumber решило мою проблему.

Комментарии:

1. Вы должны принять свой ответ здесь, чтобы вопрос отображался как ответ.

Ответ №2:

Ваше выполнение выборки имеет два источника с нулевым значением. executeFretchRequest при возникновении ошибки вернет nil. lastObject вернет nil, если массив пуст.

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

Комментарии:

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

2. Я понимаю, откуда может исходить ноль. проблема заключается в том, что один и тот же идентификатор используется дважды, в первый раз, когда извлекается ожидаемый объект, во второй раз он возвращает nil для того же значения, которое используется в предикате.