У меня есть основанное на документе приложение с использованием Core Data, и у меня есть tableView, который заполняется с помощью привязок и NSArrayController в IB. Все работает нормально, но я хотел убедиться, что первый столбец будет в режиме редактирования сразу после добавления нового объекта в массив.
Я искал подходящий код и адаптировал его из книги Хиллегаса. Редактирование работает нормально, но выбор строки не работает. Он остается в строке 0, и когда после редактирования вкладки после редактирования следующий столбец находится в этой строке. Вот версия кода, который я использовал. Я погуглил решение моей проблемы, но продолжаю получать результаты либо без Базовых Данных, ни с привязками, ни бездокументарного приложения.
Я что-то здесь упускаю?
-(IBAction)addEmployee:(id)sender {
Employee *newEmployee = (Employee *)[NSEntityDescription insertNewObjectForEntityForName:@"Employee" inManagedObjectContext:[self managedObjectContext]];
//Fetch the update Employees
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *employeeEntity = [NSEntityDescription entityForName:@"Employee" inManagedObjectContext:[self managedObjectContext]];
[fetchRequest setEntity:employeeEntity];
NSArray *fetchResults = [[self managedObjectContext] executeFetchRequest:fetchRequest error:&error];
[fetchRequest release];
NSError *error = nil;
if (fetchResults == nil) {
// Something here to handle the error.
NSLog(@"The fetch results is null");
}
int row = [fetchResults indexOfObjectIdenticalTo:newEmployee];
NSLog(@"row is %d",row);
[[tableView window] endEditingFor:nil];
[tableView editColumn:1 row:row withEvent:nil select:YES];
}
Вот исправленная (и значительно упрощенная) версия
-(IBAction)addEmployee:(id)sender {
Employee *newEmployee = [newEmployeeController newObject];
[newEmployeeController addObject:newEmployee];
[newEmployeeController rearrangeObjects];
NSArray *fetchResults = [newEmployeeController arrangedObjects];
int row = [fetchResults indexOfObjectIdenticalTo:newEmployee];
[[tableView window] endEditingFor:nil];
[tableView editColumn:1 row:row withEvent:nil select:YES];
[newEmployee release];
}