在插入时开始编辑

时间:2011-02-01 20:00:09

标签: cocoa core-data binding tableview edit

我有一个基于文档的App使用Core Data,并且有一个tableView,它使用绑定和IB中的NSArrayController填充。一切正常,但我想确保在向数组添加新对象时,第一列将立即处于编辑模式。 我四处寻找合适的代码,并根据Hillegass的书改编了一些代码。编辑工作正常,但行选择似乎不起作用。它保持在第0行,当编辑后标签时,要编辑的下一列就在该行上。这是我用过的代码的一个版本。我已经google了解我的问题的解决方案,但是在没有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];

}

这是固定的(并且极其简化)版本

-(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 个答案:

答案 0 :(得分:1)

首先,您不需要强制插入对象。 -insertNewObjectForEntityForName: inManagedObjectContext:会返回id,因此广告素材会被缩减。

您不需要获取对象只是为了获取数组。您可以在NSArrayController查询您添加的新对象,如果不存在,请添加它(很遗憾,因为我使用了NSArrayController并且不记得它是否需要循环运行循环来检测变化。)

从那里你可以向NSArrayController询问索引并继续。