У меня есть две сущности с отношением многие-к-одному. Например Employee <<---> Shop
. Когда я создаю нового сотрудника, я могу выбрать магазин для него. Я выбираю все доступные магазины, а затем выбираю один из представленных в таблице.
Теперь я хочу добавить новую строку в эту таблицу, чтобы иметь возможность установить nil для отношения, например, добавив строку с именем "None"
, и когда она будет выбрана, отношение будет employee.shop = nil;
Является ли это возможным? Я не знаю, как настроить табличное представление для выполнения этой работы ...
Тем не менее, этот код используется для получения магазинов:
-(NSArray *)projectsList
{
if (!projectsList) {
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Project" inManagedObjectContext:taskObject.managedObjectContext];
[request setEntity:entity];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"title" ascending:YES];
NSArray *sortDescriptors = [NSArray arrayWithObject:sortDescriptor];
[request setSortDescriptors:sortDescriptors];
NSError *error = nil;
NSArray *projects = [taskObject.managedObjectContext executeFetchRequest:request error:&error];
if (!projects) {
NSLog(@"Risultati della richiesta nulli!");
abort();
}
projectsList = [projects mutableCopy];
}
return projectsList;
}
и некоторые методы tableView:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [[self projectsList] count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
Project *project = (Project *)[[self projectsList] objectAtIndex:indexPath.row];
cell.textLabel.text = project.title;
if (project == taskObject.project) {
cell.accessoryType = UITableViewCellAccessoryCheckmark;
}
else {
cell.accessoryType = UITableViewCellAccessoryNone;
}
return cell;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
cell.accessoryType = UITableViewCellAccessoryCheckmark;
Project *project = (Project *)[projectsList objectAtIndex:indexPath.row];
taskObject.project = project;
NSError *error = nil;
if (![taskObject.managedObjectContext save:&error]) {
NSLog(@"Errore nel salvare il progetto per il task! %@, %@", error, [error userInfo]);
abort();
}
else {
[self.navigationController popViewControllerAnimated:YES];
}
}
Большое спасибо!