Вопрос по запросу выборки

#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 Я действительно не понимаю вашу точку зрения. Разве то, что вы сказали, не совпадает с тем, что указано в документации?