1

我正在尝试检测哪些格式将应用于用户输入的新文本。这意味着光标有一个位置,但没有文本选择(即长度 = 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;
}

建议表示赞赏。

4

1 回答 1

0

问题似乎是当文本视图的选择发生变化时,typingAttributes 字典的内容会自动清除。因此,立即查询字典会引起某种冲突。在打电话之前延迟似乎已经解决了这个问题:

[self performSelector:@selector(updateFormatButtons) withObject:nil afterDelay:0.15];
于 2012-12-07T22:03:33.210 回答