シミュレーターでどのように機能するかはよくわかりません(私が試してみたところ、元の質問にリストされているクラッシュが発生しました)。とにかく、あなたは以下の項目を見ることによってそれを修正することができます:
- 主な問題は、NIBがバンドルに含まれていなかったことです。プロジェクトターゲットの「バンドルリソースのコピー」に追加します。例:

「バンドルリソースのコピー」を表示しているときに、、、を含めSDSubCell.xib
、SDGroupCell.xib
それらのPNGファイルもすべて追加する必要があります。
余談ですが、クラッシュの原因にはならないようですが、SDNestedTableView
NIBの「ファイル所有者」基本クラスは、このプロジェクトのどこにも存在しないクラスを指します。それは良いことではありません。SDMenuViewController
とにかく、おそらくそれをまたはに変更したいと思うでしょうSDNestedTableViewController
。

クラッシュとは少し関係ありませんが、プロジェクトを見ると、心配な構造があります。
SDMenuViewController *mvc = [[SDMenuViewController alloc] initWithNibName:@"SDNestedTableView" bundle:nil];
[menuView addSubview:mvc.view];
コントローラを作成し、そのビューを取得し、ビューコントローラをスコープから外して解放するか(ARCを使用している場合)、リークします(ARCを使用していない場合)。
addSubview
元の質問から、新しいビューに移行する方法として行っているのか(これは本当に悪い習慣です)、ビューコントローラーの封じ込めを行っているのかは完全にはわかりませんでした。コードを見ると、コードにいくつかの呼び出しがありませんが、後者を実行しているように見えます。ビューコントローラの封じ込めについて読みたいと思うかもしれません。また、そのWWDC2011セッション102も確認してください。
alloc
とにかく、View Controller /init
以降の上記の2行のコードaddSubview
は、非ARCプロジェクトでリークし(ARCにアクセスしたことがある場合はクラッシュします)、View階層がViewController階層と同期していません。私はあなたが望むかもしれないことを提案します:
SDMenuViewController *mvc = [[[SDMenuViewController alloc] initWithNibName:@"SDNestedTableView" bundle:nil] autorelease];
[self addChildViewController:mvc];
[mvc didMoveToParentViewController:self];
[menuView addSubview:mvc.view];
autorelease
その最初の行に注意してください。
ビューコントローラの封じ込めは強力ですが、この基本的なハウスキーピングの一部を確実に実行する必要があります。
1つの最終更新:
このコードにはいくつかのバグがあることに気づきました。まず、inの使用は機能currentSection
しitem:setSubItem:forRowAtIndexPath
ません。最後のに基づいて設定していますexpandingItem
。したがって、いずれかを展開する前に主要な項目の1つをクリックすると、プログラムがクラッシュします。おそらく最善の方法は、currentSection
変数を完全に削除し、変数ではなくitem:setSubItem:forRowAtIndexPath
を使用することです。item.cellIndexPath.row
currentSection
SDNestedTable
残念ながら、この修正はより深刻な問題につながります。クラス自体にiOS6のバグがあるようです。これをiOS6で実行し、すべてのアイテムを展開し、下にスクロールしてから上にスクロールすると、によって返されたcellIndexPath
プロパティの割り当てが解除される可能性があるため、プログラムがクラッシュします。iOS 6でゾンビをオンにすると、リリースされたことがわかります。元のバージョンをダウンロードしてみたところ、同じ問題が発生しました。問題は、inがプロパティとして定義されていることであるように見えます(つまり、iOSが独自の目的で作成したものが不要になったと判断した場合、iOSは、SDGroupItem *item
item:setSubItem:forRowAtIndexPath
cellIndexPath
cellIndexPath
SDGroupCell
assign
indexPath
SDGroupCell
assign
このリリースされたオブジェクトへの参照)。cellIndexPath
のプロパティをSDGroupCell
からassign
に変更するだけretain
で、このiOS6のバグはなくなります。この問題について開発者に通知しましたSDNestedTable
が、この変更によりretain
、iOS6でコードがクラッシュする問題が修正されます。
[編集:著者はSDNestedTable
この問題の私の評価に同意し、この問題は最新バージョンで修正されたと報告しています。-ロブ]
幸運をお祈りしています。