我正在尝试检测哪些格式将应用于用户输入的新文本。这意味着光标有一个位置,但没有文本选择(即长度 = 0)。每次我尝试查询 typingAttributes 时,即使只是记录,应用程序也会崩溃。
Thread 1:EXC_BAD_ACCESS (code=2, address=0x4)
在 Debug Navigator 中发生的最后一件事是:
WebCore::Frame::styleAtSelectionStart() const
就在那之前,我看到
-[UITextView typingAttributes]
如果我使用大于 0 的 selectedRange.length 进行登录,那似乎没问题。我试过在启用 Zombies 和 Guard Malloc 的情况下运行,但什么也没看到。
在我的测试项目中,一旦 UITextView 成为 firstResponder 就会发生崩溃:
- (void)textViewDidChangeSelection:(UITextView *)textView
{
[self updateFormatButtons];
}
检查属性的调用:
- (void)updateFormatButtons
{
UITextView *problemTextView = [self synopsisTextView];
NSRange selectedRange = [self getSelectedTextRange];
if (selectedRange.length == 0) // No text selected
{
// HELP - Why does the following line cause a crash?
// NSLog(@"textViewFormatting options: %@", [problemTextView typingAttributes]);
}
else
{
NSLog(@"Some text selected"); // Fine here
NSLog(@"textViewFormatting options: %@", [problemTextView typingAttributes]);
}
}
基于所选范围:
- (NSRange)getSelectedTextRange
{
NSRange rangeToReturn = NSMakeRange(NSNotFound, 0);
UITextView *textView = [self synopsisTextView];
if ([textView isFirstResponder])
{
rangeToReturn = [textView selectedRange];
}
return rangeToReturn;
}
建议表示赞赏。