我有一个基于文档的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];
}
答案 0 :(得分:1)
首先,您不需要强制插入对象。 -insertNewObjectForEntityForName: inManagedObjectContext:
会返回id
,因此广告素材会被缩减。
您不需要获取对象只是为了获取数组。您可以在NSArrayController
查询您添加的新对象,如果不存在,请添加它(很遗憾,因为我使用了NSArrayController
并且不记得它是否需要循环运行循环来检测变化。)
从那里你可以向NSArrayController
询问索引并继续。