#iphone #core-data
#iPhone #ядро-данные
Вопрос:
в core data я выполняю поиск с использованием fetchRequest и предиката, подобного следующему
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription
entityForName:@"Study"
inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];
[fetchRequest setPredicate:[NSPredicate predicateWithFormat:
@"( StudyID == %@ )",self.StudyID]];
NSArray * StudyList = [self.managedObjectContext executeFetchRequest:fetchRequest error:amp;error];
как проверить, есть ли возвращаемые значения или нет
Ответ №1:
Сделайте что-то вроде:
if(!StudyList){
//handle fetch request error here
} else {
//success!
if([StudyList count] > 0){ //if array not empty
//do stuff with StudyList contents here
NSLog(@"StudyList contents: %@", StudyList);
}
}
Надеюсь, это поможет.
Комментарии:
1. Это не сработает, потому что выборка может вернуть пустой массив, если ни один объект не соответствует предикату. Вы получаете ноль только в том случае, если получаете активную ошибку, и простое отсутствие совпадений не является ошибкой.
2. Спасибо, что указали на это. Я, очевидно, предположил, что OP сможет извлечь его оттуда, но я изменил свой ответ, чтобы лучше адресовать пустой массив.
Ответ №2:
Вы проверяете размер StudyList
массива следующим образом:
if ([StudyList count]>0){
//... found at least one Study object
}else{
//... didn't find anything
}
Кроме того, вы должны следовать соглашениям об именовании. Переменная типа StudyList
должна быть написана со строчной буквы, т.е. studyList
. По соглашению, имена, начинающиеся с заглавных букв, указывают на какую-то константу, например классы, сущности, константы и т.д.
Комментарии:
1. Я согласен с комментарием о соглашениях об именовании, однако (для AMH) жизненно важно, чтобы вы реализовали обработку ошибок, а не просто проверяли наличие пустого массива. Выполняйте оба одновременно.
Ответ №3:
Просто прочитайте документацию к методу:
Если возникает ошибка, возвращает nil. Если ни один объект не соответствует критериям, указанным в запросе, возвращает пустой массив.
Комментарии:
1. Это не проверяет наличие пустого возврата, а просто проверяет, произошла ли ошибка. Выборка вернет пустой массив, если не будет найдено никаких объектов, соответствующих предикату, или если объекты объекта не существуют в графе объектов.
2. @TechZen Я действительно не понимаю вашу точку зрения. Разве то, что вы сказали, не совпадает с тем, что указано в документации?