カスタムクラスへのローカルポインターがある場合、そのポインターをクラスレベルのNSDictionary変数に格納し、最初の作成スコープが終了した後にそれを使用するにはどうすればよいですか。
作成したクラスがスコープ外になるまで、newによって作成されたメモリを保持するようにコンパイラに指示するにはどうすればよいですか?
これは、問題の変数のスコープを表すsudoコードです。
Class {
NSMutableDictionary* allElements;
SomeFunction {
InnerClosure1 {
DefaultElement* element = [DefaultElement new];
[allElements setObject:element forKey:@:"Foo"];
}
InnerClosure2 {
DefaultElement* element = [allElements objectForKey:@"Foo"];
}
}
問題は、ポインタを辞書に入れようとした後にこのエラーが発生することです。
[__NSDictionaryI setObject:forKey:]:認識されないセレクターがインスタンス0x94421d0に送信されました2013-01-31 23:35:32.575 Muskoka-Domicile [1371:19d03] *キャッチされない例外'NSInvalidArgumentException'、理由:'-[__NSDictionaryIsetObjectによるアプリの終了:forKey:]:認識されないセレクターがインスタンス0x94421d0'に送信されました
カスタムクラスの所有権を譲渡することと関係があるのではないかと思います。
編集 NSMutableDictionary*をNSDictionaryに初期化したことがわかります...