这很简单,我相信,但我仍然非常学习。
我具有连接到阵列控制器,以显示coredata对象一个NSTableView。 该表是不可编辑。 当选择了一个记录,我有保存价值精选一子视图设置为按照可见。
我试图让这个当我按下连接添加+按钮:我的阵列控制器上,一个新的条目将被制成,焦点将跳转到该项目的描述文本字段中的子视图,使用户可以immediatily开始打字,而无需子视图出现时,选择新的arrangedObject行,然后文本字段。
有任何想法吗?
我会后的截图,但我一直没用户在这里足够长的时间。
大书呆子牧场的可可书(第4版)在第9章,而不是使用NSArrayController的的-add的这个例子:对于+按钮的方法,他们使用自定义的方法来创建对象,然后将其插入阵列,应对-progress编辑和撤消经理分组,最后选择需要编辑的字段。 下面是摘录:
- (IBAction)createEmployee:(id)sender
{
NSWindow *w = [tableView window];
// Try to end any editing that is taking place
BOOL editingEnded = [w makeFirstResponder:w];
if (!editingEnded) {
NSLog(@"Unable to end editing");
return; }
NSUndoManager *undo = [self undoManager];
// Has an edit occurred already in this event?
if ([undo groupingLevel] > 0) {
// Close the last group
[undo endUndoGrouping];
// Open a new group
[undo beginUndoGrouping];
}
// Create the object
Person *p = [employeeController newObject];
// Add it to the content array of ’employeeController’
[employeeController addObject:p];
// Re-sort (in case the user has sorted a column)
[employeeController rearrangeObjects];
// Get the sorted array
NSArray *a = [employeeController arrangedObjects];
// Find the object just added
NSUInteger row = [a indexOfObjectIdenticalTo:p];
NSLog(@"starting edit of %@ in row %lu", p, row);
// Begin the edit in the first column
[tableView editColumn:0
row:row
withEvent:nil
select:YES];
}
全面实施是https://github.com/preble/Cocoa4eSolutions 。
是的,这很简单:
不要使用NSArrayController
。
当你不需要任何控制在全国各地是如何工作的类是只适合。 如果你需要控制,您应该创建自己的控制器对象,它是表视图的数据源和委托,并有一个NSFetchedResultsController访问核心数据。
我个人只用过NSArrayController
作为原型。 一旦我开始越来越重视应用,我总是把它扔出去,并把自定义的书面控制在它的位置。