2013-10-07 1 views
40

私はUITableViewのviewControllerを持っています。その行はスワイプで編集(削除)することができます。私は、削除ボタンを明らかにしたと同時に、私は私のUINavigationControllerのナビゲーションをバック使用している場合、しかし、tableView:canEditRowAtIndexPath:viewControllerをポップするときにクラッシュします

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath { 

    return YES; 
} 

、すなわちときに私popViewControllerAnimated:、アプリがクラッシュすると:私は他の、このメソッドの中でそれを行います次のメッセージ:

[のViewControllerのtableView:canEditRowAtIndexPath:]:メッセージはどのように私はこの問題を解決することができます割り当て解除インスタンスに0xaae64d0

を送りましたか?

+1

ビューコントローラの 'dealloc'メソッドでは、テーブルビューの' editing'プロパティを 'NO'に設定します。 –

+1

そして 'delegate'と' dataSource'プロパティを 'nil'にセットします。あなたがこれをしなければならないのは奇妙ですが... –

+0

優秀!あなたの最初のコメントはその場で正しく、他の2つのコールは必要ありません。私はあなたがそれを作成する場合、あなたの答えを受け入れることを嬉しく思うでしょう。 – artooras

答えて

75

ビューコントローラのdeallocメソッドでは、テーブルビューのeditingプロパティをNOに設定します。

+6

これは動作しますが、iOS7ではこれが始まりました。どんな考え? – Imran

+21

Appleはバグのコードを書いているので。 –

+0

私たちはすべて提出されていることを期待してくださいバグレポート:) – theiOSDude

42

私は同じ問題を抱えていましたが、私はARCを使用していました。私はdeallocメソッドで嫌なことをしたくありませんでした。それをviewWillDisappearで行うと、クラッシュを止めるのに十分でした。

- (void)viewWillDisappear:(BOOL)animated { 
    [super viewWillDisappear:animated]; 
    [table setEditing:NO]; 
} 
+0

[super dealloc]を呼び出さない限り、ARCの下でdeallocメソッドを持つのは間違っていますか? – artooras

+0

それは間違っていません。受け入れられた答えは何も破らず、正常にコンパイルされます。ARCがあなたのために呼び出すはずであるので、文字通り '[super dealloc]'や 'release'を呼び出すことは許されません。私の提案は、私の他のクラスのどれもが1つもないときに、私は珍しいdeallocメソッドを望んでいないので、主に混乱を減らすことでした。また、オブジェクトがリリースされる前に、そのオブジェクトにプロパティを設定するのは変です。 –

+4

このメソッドは、他のvcsなどを表示すると奇妙な動作をすることがあるので、deallocメソッドを使用します。 – Imran

0
  1. 使用

    tableview.delegate = nilのdeallocを中に()

  2. 使用

    のtableView = nilの

0

私は、これは古いです知っています投稿、しかし最近私はXcode 9とiOS 11を使用しており、SearchControllerを使用する新しい方法を採用しています。検索中にシステムの戻るボタンをクリックすると、tableView(_:canEditRowAt indexPath :)で致命的な問題が発生しました。 setEditingをfalseに変更しても、私の問題は解決されませんでした。問題は、データソースにレコードがあるかどうかによってcanEditRowAtオーバーライドでtrue/falseを返したが、検索していたときに別のデータソース(フィルタリング配列)があったということでした。適切なデータソースを確認したら、戻るボタンが機能しました。

関連する問題