がUITableView
入力されていNSFetchedResultsController
ます。最初のフェッチは正常に機能します。問題なく追加、削除、変更などを行うことができます..しかし、テーブルにユーザー定義の並べ替えを追加したいと考えています。を別のセットとNSFetchedResultsController
別の を使用するように変更することで、これを行っています。フェッチを変更するコードは次のとおりです。sortDescriptor
sectionNameKeyPath
-(void)changeFetchData {
fetchedResultsController = nil;
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Object" inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:entity];
NSString *sortKey = @"sortKey";
NSString *cacheName = @"myNewCache";
BOOL ascending = YES;
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:sortKey ascending:ascending];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[fetchRequest setSortDescriptors:sortDescriptors];
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:managedObjectContext sectionNameKeyPath:sortKey cacheName:nil];
self.fetchedResultsController = aFetchedResultsController;
fetchedResultsController.delegate = self;
[aFetchedResultsController release];
[fetchRequest release];
[sortDescriptor release];
[sortDescriptors release];
NSError *error;
if (![[self fetchedResultsController] performFetch:&error]) {
// Update to handle the error appropriately.
NSLog(@"Fetch failed");
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
exit(-1); // Fail
}
[self.tableView reloadData];
}
このメソッドを呼び出すと、うまく機能します。テーブルは、新しいセクション情報と新しい並べ替えパラメーターを使用するために、すぐに並べ替えられます。しかし、データにアイテムを追加または削除すると、TableView はその情報を更新せず、クラッシュを引き起こします。fetchedResultsController 内のオブジェクトの総数のカウントを NSLog して、その増加 (および減少) を確認できますnumberOfRowsInSection
が、そこでの変化を監視するために戻り値を NSLog すると、メソッドが呼び出されますが、値は変化しません。次のクラッシュを取得します(追加用ですが、削除用も同様です)
無効な更新: セクション 2 の行数が無効です。更新後の既存のセクションに含まれる行数 (3) は、更新前にそのセクションに含まれる行数 (3) に、その数をプラスまたはマイナスした値と等しくなければなりません。そのセクションから挿入または削除された行数 (1 挿入、0 削除)。userInfo (ヌル)
アプリを再起動すると、追加されたアイテムが表示されるか、削除されたアイテムが表示されないため、データソースを正しく変更しています。
何か案は?