2012-04-07 2 views
1

私はいくつかのセクションを持つUITableViewを持っており、セクション数は動的です。つまり、いつでも増やすことができます。セクション数が重要でないテーブルビューで、アニメーションでセクションをリロードする。私はちょうどこれを呼び出します:UITableVIew reloadSections:withAnimation:withoutHassle

[notesTableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationAutomatic]; 

しかし、セクションの数が変わったときにこれを動作させることは、苦痛です。私はいつもその典型的なアサーションエラー"The number of sections in your tableview before the reload must be the same as after the reload..etc"を得る。これを取り除くには[tableView insertSections...]を使うべきだと私は理解していますが、これは私の状況では難しいかもしれません。

私のセクション数は、配列のサイズに基づいています。アニメーションを使用してセクションを手動で挿入することを心配することなく、[tableView reloadData]と同じくらい簡単に自動的にセクションをリロードすることができますか?

(私は安い回避策はUIViewのアニメーションまたはCAAnimationを使用することです知っているが、それはかなりreloadSections withAnimation方法と同じ効果を与えるものではありません。)

+0

を作成するには、万が一コアデータを使用していますか? – Gobot

+0

はい私はコアデータを使用しています.. – Snowman

答えて

1

あなたはFetchedViewControllersで遊んでいるとき、これは一般的なエラーです。そのエラーが表示されるのは、dataSourceのオブジェクトを削除していて、tableViewがtableViewをロードしようとしているために、delegateMethodsが表示されているためです。

あなたは2つのオプションがあります。

  1. FetchedResultsControllerデリゲートメソッドを実装してobjectWillChangeを実装する(または)objectDidChange方法、及びその内部の問題を修正する必要があります

    [[self tableView] reloadData]; 
    
    // or 
    
    [[self tableView] endUpdates]; 
    

    のようなものを言います。

  2. 通知を実装する(別のmanagedObjectContextでデータを削除する場合)NSManagedObjectContextDidSave(または)NSManagedObjectContextDidChangeの通知を送信します。次に、通知の変更をMERGEに追加する必要があります。しかし、私はあなたの問題がこれほど深刻だとは思わない。私はoptions(1)で十分であると言います。

-2

これはアニメーションで動作するかどうか私は知りません、それは...あなたのUITableViewの実装で

はこのようにあなたnumberOfSections方法を変更する必要があります。

- (NSInteger)numberOfSections 
{ 
    return numberOfSections; 
} 

numberOfSectionsがNSIntegerですそれは必要に応じて変化します。この番号を変更した後

は呼び出そう:

[tableView reloadData]; 

とあなたのUITableViewはそれに応じて変更する必要があります。

編集:アニメーションでこれを使用しますが、私はあなたのケースではうまくいきません。スタイルの編集、行の挿入と削除、コンテンツの一般的な更新で私の仕事をしています。

これを置く、あなたのUITableViewの内容を変更する必要があります。

[tableView beginUpdates]; 
// Here change your contents 
[tableView endUpdates]; 
+0

ええ、私はすでにこれを知っていますか?アニメーションはなぜ私がこの質問をしているのかです。 – Snowman

+0

OK、それはアニメーションでは機能しません...申し訳ありません:( – Beppe

+0

私の編集を見てください! – Beppe

0

// NSMutableSet [self.tableView beginUpdates]; if (isAdd) { [self.tableView insertSections:insertIndexSet withRowAnimation:UITableViewRowAnimationBottom]; } else{ [self.tableView deleteSections:insertIndexSet withRowAnimation:UITableViewRowAnimationTop]; } [self.tableView endUpdates];