ユーザーが入力する新しいテキストに適用される書式を検出しようとしています。つまり、カーソルには位置がありますが、テキスト選択はありません (つまり、長さ = 0)。loggingAttributes をクエリしようとするたびに、ログに記録するだけでも、アプリがクラッシュします。
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;
}
提案をいただければ幸いです。