コードのブロックを取得し、NSAttributedString
NSAttributedString - enumerateAttributesInRangeによってクラッシュが発生しますか?
- にすべての属性のためにそれを実行
enumerateAttributesInRange
方法は非同期ボックを呼んでいますか?
OTHR私のアプリがフリーズ取得した後、次のような方法が1本当に素早く2回連続で呼び出されるとき、私はそれを疑問に思ってenumerateAttributesInRangeは非同期コードのブロックを実行するためですので、2つのスレッドが私AttributedStringのを修正しようとしています同時に。
- (void) doSomething
{
//following line works fine
[self doSomethingwithAttributedString];
//following line works fine
[self doSomethingwithAttributedString];
[self performSelector:@selector(doSomethingwithAttributedString) withObject:nil afterDelay:1];
//following crashes
[self doSomethingwithAttributedString];
[self doSomethingwithAttributedString];
}
- (void)doSomethingwithAttributedString
{
[self.attributedString enumerateAttributesInRange:_selectedRange options:NSAttributedStringEnumerationLongestEffectiveRangeNotRequired usingBlock:
^(NSDictionary *attributes, NSRange range, BOOL *stop) {
// Here I modify the dictionary and add it back to my attributedString
}];
}
また、nilオブジェクトの辞書キーをテストすることを忘れないでください。 – Stuart