Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c NSOutlineTableView中的TextShoulDediting将被调用两次_Objective C_Macos_Cocoa_Nstextfield - Fatal编程技术网

Objective c NSOutlineTableView中的TextShoulDediting将被调用两次

Objective c NSOutlineTableView中的TextShoulDediting将被调用两次,objective-c,macos,cocoa,nstextfield,Objective C,Macos,Cocoa,Nstextfield,我刚刚实现了以下方法,该方法假设在NSOutlineView中更改NSTextField的值后采取一些操作 -(BOOL)control:(NSControl *)control textShouldEndEditing:(NSText *)fieldEditor { NSLog(@"end editing"); NSTextField* tf = (NSTextField*)control; if(selectedItem && [selectedIt

我刚刚实现了以下方法,该方法假设在NSOutlineView中更改NSTextField的值后采取一些操作

-(BOOL)control:(NSControl *)control textShouldEndEditing:(NSText *)fieldEditor
{
    NSLog(@"end editing");
    NSTextField* tf = (NSTextField*)control;

    if(selectedItem && [selectedItem isKindOfClass:[HSCategoryClass class]])
    {
        HSCategoryClass* c = selectedItem;
        c.name = tf.stringValue;

        // request the update from DB
        [[NSNotificationCenter defaultCenter] postNotificationName:@"updatingCategoryName" 
                                                            object:c 
                                              userInfo:@{@"sender":self}];
    }
    return YES;
 }
但是,当我完成编辑并按enter键或在文本字段之外的任何位置导航时,该方法将被调用两次而不是一次

有人知道这是为什么吗


非常感谢您的任何帮助

该例行程序并不意味着编辑已结束。相反,调用它是为了确定它是否应该结束(因此方法的名称)。框架可以多次调用它,您不应该为此依赖它

而是重写NSOutlineView的textdidediting:方法。 一定要打超级电话

因此,您将对NSOutlineView进行子类化,并在子类中:

- (void)textDidEndEditing:(NSNotification *)aNotification
{
  // do your stuff

  [super textDidEndEditing:aNotification];

}

嗨,肯,谢谢你的回答!我试图按照您建议的方式实现它,但出于某种原因,textdidediting:在我的OutlineView中没有被调用…您知道可能存在什么问题吗?您是否记得将nib中outline视图的类更改为您的子类?