2017-02-19 17 views
1

私はテーブルビューでNSFetchedResultsControllerを使用しています。私の問題は、私の_fetchedResultsControllerに0行があるときに "データビューなし"を作成したいと思うことです。NSFetchedResultsControllerを使用しているtableViewにデータビューがありません

私はそれは素晴らしい仕事を私のnumberOfSectionsInTableView:

このような
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 
    if ([[_fetchedResultController.sections firstObject] numberOfObjects] == 0) { 
     MyNoDataView *view = [[MyNoDataView alloc] initWithFrame:tableView.frame]; 
     tableView.backgroundView = view; 
     tableView.separatorStyle = UITableViewCellSeparatorStyleNone; 
     return 0; 
    } 
    else { 
     tableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine; 
     tableView.backgroundView = nil; 
     return 1; 
    } 
} 

でそれを作成しようとしました。データがまだ挿入されていない場合はデータビューが表示されず、データがある場合はテーブルビューが表示されます。

私の問題は、その行で削除アクションを行ったときに始まります。技術的には、唯一の1行があれば、私はちょうど、そして、このNSPredicate

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"isActive == %@ ", @YES]; 
[fetchRequest setPredicate:predicate]; 

を使用してfetchedResultControllerに私のfetchRequestように、そのオブジェクトのプロパティ(isActive)を更新し、私はそれを削除し、私はこのエラーを取得

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'UITableView internal bug: unable to generate a new section map with old section count: 1 and new section count: 0' 

私はnumberOfSectionsInTableView:を削除しようとしましたが、突然これらのエラーはなくなりました。私はここで何が起こっているのか分かりませんが、numberOfSectionsInTableView:に私の条件の周りに間違いがあると思います。

ご協力いただければ幸いです。どうもありがとうございます!

+0

重複をチェックする。これをNSFetchedResultsControllerデリゲートメソッドで処理する必要があります。 NSFetchedResultsControllerは、カスタムセルとセクションを追加しているかどうかを「知りません」。自分のデータを提供するだけで、自分のアカウントからセルとセクションを挿入します。すでにセルとセクションがある場合は、数字が正しくuppを追加せず、クラッシュします。また、** sidenote **なぜ "MyNoDataView"を割り当てて、numberOfSectionsInTableViewにseperatorstylesを設定するのですか?それは本当に悪い習慣です。 –

+0

**編集**重複フラグを削除しました。挿入や削除などの処理方法に関するコードを追加してください。エラーを見つけやすくなります。エラーコードの検索に役立つかもしれません:http://stackoverflow.com/questions/33951169/deleting-the-last-section-of-a-uitableview-causes-an-exception and https://forums.developer .apple.com/thread/9964 –

+0

データビューtbhを作成したいだけです。 MyNoDataViewをどのように割り当てて、テーブルビューの背景として配置する必要があると思いますか?前もって感謝します。 –

答えて

1

は "MyNoDataView" を割り当て、numberOfSectionsInTableViewでseperatorstylesを設定し、

ベースSneakの答えを解決して本当に悪い習慣です。だから私はcontrollerDidChangeContent:をフェッチされた結果コントローラデリゲートに変更することになった。

- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller { 
    // The fetch controller has sent all current change notifications, so tell the table view to process all updates. 
    if ([controller.fetchedObjects count]) { 
     self.tableView.backgroundView = nil; 
    } 
    else { 
     MyDataView *view = [[MyDataView alloc] initWithFrame:self.tableView.frame]; 
     self.tableView.backgroundView = view; 
    } 

    [self.tableView endUpdates]; 
} 
+0

ソリューションを投稿していただきありがとうございます。私も同様の性質の問題を抱えていました。今すぐ修正しました。 –

+0

@ sweta.meそれを聞いてうれしい! –

関連する問題