У меня есть приложение на основе документов с использованием Core Data, и у меня есть таблицаView, которая заполняется с помощью привязок и NSArrayController в IB. Все работает нормально, но я хотел убедиться, что первый столбец сразу будет в режиме редактирования при добавлении нового объекта в массив. Я осмотрел подходящий код и адаптировал некоторые из книги Hillegass. Редактирование работает отлично, но выбор строки не работает. Он остается в строке 0, и когда табуляция после редактирования, следующий отредактированный столбец находится в этой строке. Вот версия кода, который я использовал. Я искал решение для своей проблемы, но продолжаю получать результаты либо без Core Data, либо с привязками, либо с помощью приложения без документов. Я что-то упустил?Начать редактирование при вставке
-(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];
}
Вот фиксированной (и значительно Simpified) версии
-(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];
}
Получил его отсортировано. Теперь я оглядываюсь назад и серьезно задаюсь вопросом, что, черт возьми, я думал ... – BillySangster
Относительно вашей фиксированной версии: вы освобождаете newEmployee слишком рано, а затем используете его при вызове 'indexOfObjectIdenticalTo:'. Используйте autorelease или просто отпустите его позже. –
ОК, я выпустил его внизу внизу. Благодаря! – BillySangster