Cocoa NSTextView在处理textDidChange时插入字符两次

Cocoa NSTextView在处理textDidChange时插入字符两次,cocoa,nstextview,caret,Cocoa,Nstextview,Caret,我截获了NSTextView的textDidChange事件,试图检测转义语句的开头和结尾。问题是,当我实际尝试执行任何操作时,键入的字符似乎插入了两次 比如说 。变成 {变成{{ |变成|| 有人知道为什么会这样吗?我已经在下面的textview委托中发布了代码 - (void)textDidChange:(NSNotification *)aNotification { //get the caret position NSInteger insertionPoint =

我截获了NSTextView的textDidChange事件,试图检测转义语句的开头和结尾。问题是,当我实际尝试执行任何操作时,键入的字符似乎插入了两次

比如说

  • 。变成
  • {变成{{
  • |变成||
有人知道为什么会这样吗?我已经在下面的textview委托中发布了代码

- (void)textDidChange:(NSNotification *)aNotification
{
    //get the caret position
    NSInteger insertionPoint = [self.manuscriptTextView selectedRange].location;
    NSInteger low =insertionPoint -2;
    NSRange r = {low, insertionPoint};
    NSString* parse = [self.manuscriptTextView.textStorage.string substringWithRange:r];
    if([parse isEqualToString:@"{{"])
    {
        printf("begin{{\n");
    }
    else if([parse isEqualToString:@"}}"])
    {
        printf("}}end\n");
    }


}

问题是,这些应用程序是基于文档的应用程序,而NSDocument的autosave范例没有完全实现,导致出现异常。显然,当修改NSDocument控制的UI时出现异常时,可能会发生类似这样的奇怪情况。

mment我们的
-textDidChange
您没有这个问题,对吗?事实上,注释掉textDidChange可以阻止这种情况发生。您有任何异常吗?是的,我没有注意到,因为我在约束上有另一个异常。