0

Я новичок в разработке iOS, и у меня мокрые ноги в Core Data. У меня есть приложение, которое я медленно собираю вместе (спасибо за помощь с этого сайта!), Но я зациклился на том, как получать данные.Извлечение определенных данных из выбранной записи

Приложение:

Мое приложение состоит из двух основных экранов, как UITableViews: A «Класс List» вид, где они могут добавлять новые классы, и «Добавить Моя модель данных имеет две сущности: курс (для класса) и Студент, со многими отношениями с Курсом-Студентом. Сейчас у меня это работает, так что, когда я нажимаю на класс в представлении «Список классов», меня берут в представление «Добавить учеников», где я могу добавить студенты в классе, но мой контролер результатов выборки возвращает всех учеников, которых я добавил. Мой вопрос: как мне отформатировать запрос на выборку в представлении «Добавить учеников» для извлечения только тех студентов, которые должны принадлежать этому классу? у меня есть прямо сейчас:

-(NSFetchedResultsController *) fetchedResultsController { 
if (_fetchedResultsController !=nil) { 
    return _fetchedResultsController; 
} 
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Student" inManagedObjectContext:self.managedObjectContext]; 
[fetchRequest setEntity:entity]; 

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES]; 
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil]; 
[fetchRequest setSortDescriptors:sortDescriptors]; 

_fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:@"name" cacheName:nil]; 
_fetchedResultsController.delegate = self; 
return _fetchedResultsController; 

}

Я предполагаю, что это что-то делать с предикатами, но я не получил, что далеко в моем обучении. Любая помощь вообще будет оценена по достоинству. Благодаря!

ответ

0

Вы догадываетесь правильно. Для того, чтобы получать все студенты, принадлежащие к определенной конечно, добавить следующий предикат запроса выборки:

Course *theCourse = ...; // your Course object 
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"course = %@", theCourse]; 
[fetchRequest setPredicate:predicate]; 

(при условии, что к одному отношения с Студент на курс называется «Курс») ,

+0

Но как указать курс, выбранный на предыдущем экране? –

+0

Один из способов - добавить свойство «курс» ко второму контроллеру представления и установить значение в файле didSelectRowAtIndexPath или prepareForSegue или что-то еще, что вы используете для перехода ко второму контроллеру представления. (На самом деле это совсем другой вопрос.Если вы google для «set property в другом контроллере представления», вы найдете много информации.) –

+0

Итак, вот моя подготовкаForSegue в представлении таблицы ClassList: if ([[идентификатор segue] isEqualToString : @ "showAddStudents"]) { AddStudentsTableViewController * addStudents = (AddStudentsTableViewController *) [segue destinationViewController]; NSIndexPath * indexPath = [self.tableView indexPathForSelectedRow]; Курс * selectedCourse = (курс *) [self.fetchedResultsController objectAtIndexPath: indexPath]; addStudents.currentCourse = selectedCourse; [addStudents setManagedObjectContext: self.managedObjectContext]; Где я могу отправить выбранную строку? –

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