0

いくつかのセクションを持つテーブルビューがあります。ある時点で、tableView からセクションを削除したいと考えています。これを行うには、ヘッダーにロングタップ ジェスチャを用意し、ロングタップすると、次のように UIMenuController を呼び出します。

UIMenuController *deleteMenu = [UIMenuController sharedMenuController];
UIMenuItem *delete = [[UIMenuItem alloc] initWithTitle:@"Delete"     action:@selector(deleteCell:)];
[deleteMenu setMenuItems:[NSArray arrayWithObject:delete]];
[deleteMenu update];
[deleteMenu setTargetRect:CGRectMake(0, 0, 320, 460) inView:self.superview];
[deleteMenu setMenuVisible:YES animated:YES];

これは、ヘッダーのカスタム ビュー サブクラスで行われます。メソッドではdeleteCell:、デリゲート メソッドを呼び出します (デリゲートは、テーブルビューを所有するビュー コントローラーです)。デリゲート メソッドの実装では、次のようにセクションを削除しようとします (セクションは int です)。

[statsTable deleteSections:[NSIndexSet indexSetWithIndex:section] withRowAnimation:UITableViewRowAnimationAutomatic];

この行で、EXC_BAD_ACCESS を取得します。奇妙なことに、これが発生すると Xcode もクラッシュするため、BAD_ACCESS の原因を確認できません。なぜこれが起こっているのか誰かが知っているなら、あなたの助けは大歓迎です。

ありがとう、

編集::解決策が見つかりました。テーブルビューから何かを削除できるようにするには、テーブルビューを持つVCが最初の応答者になる必要があります。ありがとう

4

1 に答える 1

1

UIMenuController には delete: メッセージを送信する delete MenuItem があります。独自の削除でコピーする代わりに、それを使用することをお勧めします。

余談ですが、Manage Schemes をクリックすることで、Xcode 4.3 で非常に簡単に NSZombies を有効にすることができます (以下のスクリーンショットのように、現在のスキーム/デバイスを含むバーをクリックすることでこれにアクセスできます...) ここに画像の説明を入力

次に、ポップアップする画面で [編集] をクリックすると、次のように表示されます...

ここに画像の説明を入力

「ゾンビオブジェクトを有効にする」にチェックを入れれば準備完了です。

于 2012-04-03T21:06:36.677 に答える