いくつかのデバッグを行って、これを与える NSDictionary 変数の説明を出力しました:
(NSDictionary *) labelAttrs = 0x00000001
誰かがこれがなぜなのかを明確にできますか1
?
nil
またはオブジェクトポインターを理解しますが、なぜ1
ですか?
アップデート
コード:
NSDictionary *labelAttrs = @{NSForegroundColorAttributeName:[UIColor darkGrayColor]};
iOS6ではなくiOS5で実行するとクラッシュしますが、これは次のとおりです。
新しいオブジェクト リテラルは iOS 5 と下位互換性がありますか?
iOS5 で新しいリテラルを使用できると言っているようです (iOS6 に対してビルドし、Xcode >= 4.5 を使用し、最新の LLVM でコンパイルする限り - たとえば、画面グラブを参照してください)。そして、Apple によると、私はそれらを使用しても問題ないはずです: https://developer.apple.com/library/ios/#releasenotes/ObjectiveC/ObjCAvailabilityIndex/index.html
以前の Xcode での外観は次のとおりです。
次に、ステップオーバーすると:
注:これにより、同じクラッシュが発生します:
NSDictionary *labelAttrs = [NSDictionary dictionaryWithObjectsAndKeys:[UIColor darkGrayColor], NSForegroundColorAttributeName, [UIFont fontWithName:CUSTOMFONT size:size], NSFontAttributeName, [NSNumber numberWithInt:0], NSStrokeWidthAttributeName, nil];
これ (および次の 2 行のコード) を削除すると、アプリはクラッシュすることなく実行されます。しかし、明らかに属性付きの文字列はありません。
更新: 解決しました。属性付き文字列は iOS5 では使用できません (少なくとも UILabel の場合): NSAttributedString は iOS 6 より前に使用できますか?