IET ANOTHER EDIT(奇妙さを増すため)コードの関連部分を表示するためにEDITED
やあ。私が理解していないNSMutableArrayには奇妙な問題があります...
説明:
プロパティ (非アトミック、保持) として定義され、合成され、29 個の要素で初期化された NSMutableArray があります。
realSectionNames = [[NSMutableArray alloc] initWithCapacity:29];
初期化後、必要に応じて要素を挿入でき、すべてが正常に機能しているようです。
ただし、アプリケーションの実行中に配列に新しい要素を挿入すると、要素を挿入した関数で配列を出力でき、すべて問題ないように見えます。
しかし、テーブル内の行を選択し、その配列を読み取る必要があると、アプリケーションがクラッシュします。実際、配列を印刷することさえできなくなりました。
NSMutableArray を使用するときに、私のような初心者が見逃している可能性がある、誰もが知っておくべき「魔法的で論理的なトリック」はありますか?
どうもありがとう。
配列を次のように宣言します
realSectionNames = [[NSMutableArray alloc] initWithCapacity:29];
配列にオブジェクトを挿入します
[realSectionNames addObject:[category categoryFirstLetter]];
私はそれを挿入することもできることを知っていますが
[realSectionNames insertObject:[category categoryFirstLetter] atIndex:i];
ここで、「i」は最初の空いている位置です。
挿入後、tableView のデータをリロードします。データをリロードする前または後に配列を印刷すると、必要な情報が含まれていることがわかります。
その後、テーブルで行を選択すると、アプリケーションがクラッシュします。この realSectionNames はいくつかの UITableViewDelegate 関数で使用されますが、その場合は問題になりません。本当に重要なことは、 didSelectRowAtIndexPath 関数の先頭で配列を出力すると、すべてがクラッシュすることです (もちろん、何も出力されません)。彼が動作する前に行を印刷するため、その行にあると確信しています(例):
NSLog(@"Anything");
NSLog(@"%@", realSectionNames);
出力を与えます:
2010-03-24 15:16:04.146 myApplicationExperience[3527:207] 何でも
[セッションは 2010-03-24 15:16:04 +0000 に開始。 Inc. GDB は、GNU General Public License の対象となるフリー ソフトウェアであり、特定の条件の下で変更および/またはコピーの配布を歓迎します。条件を表示するには、「showcopy」と入力します。GDB の保証は一切ありません。詳細については、「保証を表示」と入力してください。この GDB は "i386-apple-darwin".sharedlibrary apply-load-rules all プロセス 3527 にアタッチするように構成されました。
今回私がどんな愚かなことをしたのか、まだ理解できていません... 脳外科医のキャリアをたどるのに遅すぎることはないのでしょうか?
答えに続いて、私は印刷しました
NSLog(@"self=%x", self);
NSLog(@"self=%@", self);
NSLog(@"realSectionNames=%x", realSectionNames);
すべての関数でまったく同じ結果が得られます (デリゲートからかどうかに関係なく)。
NSLog(@"realSections = %@", realSectionNames);
私のviewWillAppear、didSelectRowAtIndexPathでうまく印刷され、viewForHeaderInSectionでクラッシュします。ちなみに、スレッドはありません...
だから、何をすべきかわからないまま、私は「もの」を試しています... realSectionNames のすべての参照を self.realSectionNames に変更しました
viewForHeaderInSection で印刷すると、次の問題が発生します。
2010-03-24 16:01:44.067 myApplication[4104:207] numberOfSectionsInTableView result -> 1
2010-03-24 16:01:44.068 myApplication[4104:207] viewForHeaderAtSection
2010-03-24 16:01:44.068 myApplication[4104:207] self=3d13470
2010-03-24 16:01:44.068 myApplication[4104:207] self=<RootViewController: 0x3d13470>
2010-03-24 16:01:44.069 myApplication[4104:207] self.realSectionNames=3b12830
2010-03-24 16:01:44.070 myApplication[4104:207] realSections = (
<__NSArrayReverseEnumerator: 0x3b50500>
)
2010-03-24 16:01:44.070 myApplication[4104:207] *** -[__NSArrayReverseEnumerator length]: unrecognized selector sent to instance 0x3b50500
2010-03-24 16:01:44.071 myApplication[4104:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSArrayReverseEnumerator length]: unrecognized selector sent to instance 0x3b50500'
2010-03-24 16:01:44.072 myApplication[4104:207] Stack: (
31073371,
2572170505,
31455291,
31024758,
30877378,
276908,
26404,
3227182,
4544033,
4551926,
4550923,
3267462,
3207973,
3249408,
25927,
3222086,
3205252,
459178,
30857920,
30854216,
39163413,
39163610,
2949039
)
NSArrayReverseEnumerator とは??? そして、なぜそれは私にとって意地悪なのですか?