Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.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
Cocoa 如何知道何时将附件属性添加到我的NSTextView?_Cocoa_Nstextview - Fatal编程技术网

Cocoa 如何知道何时将附件属性添加到我的NSTextView?

Cocoa 如何知道何时将附件属性添加到我的NSTextView?,cocoa,nstextview,Cocoa,Nstextview,由于应用程序中某些NSTextView附件的语义,我想知道它们是何时从文本存储中插入或删除的 NSTextView的子类实现了shouldChangeTextInRange:replacementString:方法,该方法允许我轻松查看附件何时将被替换(我可以搜索指定范围内的文本存储) 因为替换字符串只是一个NSString而不是NSAttributedString,所以我无法从这个方法中看出是否插入了附件。文档甚至说,如果编辑“仅属性”,字符串可能为零 所以问题是,插入附件时,最佳覆盖点是什么

由于应用程序中某些NSTextView附件的语义,我想知道它们是何时从文本存储中插入或删除的

NSTextView的子类实现了shouldChangeTextInRange:replacementString:方法,该方法允许我轻松查看附件何时将被替换(我可以搜索指定范围内的文本存储)

因为替换字符串只是一个NSString而不是NSAttributedString,所以我无法从这个方法中看出是否插入了附件。文档甚至说,如果编辑“仅属性”,字符串可能为零

所以问题是,插入附件时,最佳覆盖点是什么?或者可能同样有用:当属性被修改时,看到的最佳覆盖点是什么


更新:我在上面说过,我无法知道是否正在插入附件。有人向我指出,我可以看出其中包含“an”附件,因为字符串将包含神奇的NSAttachmentCharacter。但在编辑完成之前,我不会有关于附件的具体信息。

我将查看NSTextStorage委托方法-textStorageDidProcessEditing:,每次对基础文本存储进行更改时都应调用该方法。然后,您可以使用-EditeRange、-editedMask和-changeInLength方法确定文本存储的哪个部分已更改,并在该范围内查找您可能感兴趣的任何附件。

您可能需要查看两种
NSTextStorage
委托方法:

- (void)textStorageWillProcessEditing:(NSNotification *)notification;
/* Delegate can change the characters or attributes */

- (void)textStorageDidProcessEditing:(NSNotification *)notification;
/* Delegate can change the attributes */

textStorageWill/didprocesseediting
内部,您可以调用
-[NSTextStorage editedMask]
-[NSTextStorage editedRange]
来找出发生了什么变化,然后采取相应的措施。

委托方法有各种不同的情况。最好是这样

谢谢,布莱恩。这并不像我所希望的那样理想,但它看起来确实会奏效。很遗憾,他们没有在shouldChange…方法中包含属性。据我所知,
-textStorageWillProcessEditing:
允许对文本进行比
-textstoragedidprocesediting:
更多的更改。你可能想用它来代替。嗨,乔纳森-谢谢你的评论。我对你的答案投了赞成票,但决定接受布赖恩的答案,因为那是早些时候的事,因为它已经累积了几张额外的选票。