2012-12-07 18 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];