2012-12-07 20 views
1

我正在尝试检测将对用户输入的新文本应用的格式。这意味着光标有一个位置,但没有文本选择(即长度= 0)。每次我尝试查询typingAttributes时,即使只是记录,应用程序也会崩溃。NSAttributedString typingAttributes导致崩溃

Thread 1:EXC_BAD_ACCESS (code=2, address=0x4) 

在调试导航出现这种情况的最后一件事是:

WebCore::Frame::styleAtSelectionStart() const 

而在此之前只是,我看到

-[UITextView typingAttributes] 

如果我登录了selectedRange.length大于0 ,它似乎很好。我试过运行僵尸和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; 
} 

建议感激。

回答

0

问题似乎是,当文本视图的选择更改时,typingAttributes字典的内容会自动清除。因此立即查询字典导致了某种冲突。通话之前延迟似乎已解决它:

[self performSelector:@selector(updateFormatButtons) withObject:nil afterDelay:0.15];