NSMutableDictionary捨てdoesNotRecognizeSelectorにobjectForKey?
-
21-08-2019 - |
質問
私は総伝iPhoneプログラミング、思い入例外がスローされることにしていないつもりだったんで包んです。
背景:エラーが起きているのカスタムsubview、発生直ちに搬入時のプログラム。もしかしたら例外がスローされるオーバーライドdrawRect方法です。このコードを投げるエラー。
- (void)drawRect:(CGRect)rect{
NSNumber *points = [NSNumber numberWithInt: star.numberOfPoints];
//HERE. Doesn't recognize selector?!
CGPathRef t = (CGPathRef)[starPaths objectForKey:points];
/*snip*/
starPathsが初期化されawakeFromNibとしてNSMutableDictionary能力1.
の例外がなくなっちゃうです-[NSObject doesNotRecognizeSelector:]
starPathsの宣言では、ヘッダファイルのリスナーをアンインストールして
NSMutableDictionary *starPaths;
で初期化されて
- (void)awakeFromNib{
starPaths = [NSMutableDictionary dictionaryWithCapacity: 1];
}
最後に、このような得点のコードがうまくいった追加要素の辞書、コードエントリを追加するには頼を受け、ゼロからの応答辞書ることを知った特定の入力が必要することになっています。
ご意見募集その他の情報があればいいのか。他の慈善団体に寄付してもよいでよろしくお願いしたい情報を見落とさないよう、明確なかったたきっこう時間がない。
解決
retain
変数をstarPaths
または明示的に[[NSMutableDictionary alloc] initWithCapacity:1]
でそれを自分で配分していない場合は、それが自動的に実行ループの次の反復にリリースされます。
あなたがする必要がある。
starPaths = [[NSMutableDictionary dictionaryWithCapacity:1] retain];
または
starPaths = [[NSMutableDictionary alloc] initWithCapacity:1];
ちょうどあなたが不要になったときにそれをrelease
することを確認します。
他のヒント
いくつかのチェック:
はstarPathsとして宣言されたNSMutableDictionary*インスタンス変数?いることで初期化されます。を利用しませんでしたのdictionaryWithCapacityメソッドを返しますオートリオブジェクトはinitWithCapacityるニーズを明示的に保有).にすることもできますので、ごしていきたいと考えていitシステムの開発が行われます。
ダブルチェックかどうかを確認するためにヘッダファイルを適切に搭載されているための宣言starPathsが含まれて実行ファイルを使用していただいて結構です。
一般的にいって神秘に誤りがいが破損します。みつけにブレークポイントの最初の行のdrawRect方法及びたい
po starPaths
"にデバッガコンソールウィンドウ機能を参照してくださってどのようなオブジェクトのランタイムは考えます。