- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在创建我的第一个 Mac 应用程序,一个文本编辑器。它是基于文档的,Document.xib 有一个 nstextview。我已将 Document 类作为 TextView 的委托(delegate)。我正在实现该方法:
-(void)textViewDidChangeSelection:(NSNotification *)notification
{
NSRange range=self.textView.selectedRange;
NSLog(@" %@ ",[[self.textView textStorage] attributesAtIndex: range.location
effectiveRange: &range]);
我将使用 NSLog 内部的方法调用来获取所选文本的属性,并从该通知方法更新下划线按钮(按下或不)。 问题是,当应用程序运行并且我按下某个键时,会引发异常: 引发了未捕获的异常
*** -[NSConcreteTextStorage attributesAtIndex:effectiveRange:]: Range or index
out of bounds
我尝试通过 @try: @catch: block 进行调试,似乎上面的方法总是抛出该异常。如果我更换:
range.location
与
(range.location-1)
仅当光标位于索引 0 时才会抛出该异常。
有谁知道发生了什么吗?
最佳答案
effectiveRange 不是该方法用来确定扫描属性范围的范围。返回时,该范围将包含属性和值与索引 attributeAtIndex 处的属性和值相同的范围(即,该方法将为范围变量分配不同的值)。
如果要将查找属性的方法所使用的范围限制为所选范围,请使用以下方法,并将 rangeLimit 设置为所选范围:
(NSDictionary *)attributesAtIndex:(NSUInteger)索引最长有效范围:(NSRangePointer)aRange inRange:(NSRange)rangeLimit
-(void)textViewDidChangeSelection:(NSNotification *)notification
{
NSRange selectedRange=self.textView.selectedRange;
NSRange effectiveRange;
if(selectedRange.length > 0) {
NSLog(@" %@ ",[[self.textView textStorage] attributesAtIndex:selectedRange.location
longestEffectiveRange:&effectiveRange inRange:selectedRange]);
}
}
当 selectedRange 长度为 0 时,该方法似乎不起作用。这就是为什么在调用它之前检查 selectedRange.length 的原因。
关于objective-c - 引发异常 - NSTextView 委托(delegate) - textViewDidChangeSelection : notification,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17967334/
我有一个 textView,如果我选择一个字符并且该字符是一个投票箱 (\u{2610}),则代码应将投票箱替换为带有 x 字符 (\u{2612}) 的投票箱。 问题是代码插入了两个带有 x 字符
我有什么: TextView NSArray(字符串) AVAudioplayer(尚未实现) 当我在 TextView 中选择一个单词时: • 检查数组中是否存在单词 • 启动具有关联声音的音频播放
在 textViewDidChangeSelection 委托(delegate)中为 textView 设置 selectedRange 属性时出现奇怪的行为。 我在 viewDidLoad 中的代
我正在尝试做的事情: UITextView 中有一个属性文本,当用户点击文本某处(不是选择文本,只是将闪烁的光标放在其他地方)时,光标周围的整个句子都会改变颜色。 我是如何尝试做到这一点的: p
由于各种原因,每当更改选择时我都需要访问 TextView 中的文本,因此我实现了委托(delegate)方法 textViewDidChangeSelection() 来执行此操作。但出于某种原因,
我的 ViewController 实现了 UITextView 委托(delegate)方法 textViewDidChangeSelection。测试时一切都按预期工作。但是,如果应用程序置于后台
我正在创建我的第一个 Mac 应用程序,一个文本编辑器。它是基于文档的,Document.xib 有一个 nstextview。我已将 Document 类作为 TextView 的委托(delega
我是一名优秀的程序员,十分优秀!