Начать редактирование при вставке - PullRequest
2 голосов
/ 01 февраля 2011

У меня есть основанное на документе приложение с использованием 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];

}

1 Ответ

1 голос
/ 02 февраля 2011

Во-первых, вам не нужно приводить вставку объекта. -insertNewObjectForEntityForName: inManagedObjectContext: возвращает id, поэтому приведение является избыточным.

Вам не нужно извлекать объекты только для того, чтобы получить массив. Вы можете запросить NSArrayController о новом объекте, который вы добавили, если его там нет, добавьте его (извините, давно я использовал NSArrayController и не помню, нужен ли ему цикл цикла выполнения для обнаружения изменение).

Оттуда вы можете запросить индекс NSArrayController и идти вперед.

...