#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 для того же значения, которое используется в предикате.