6

アプリを実行するたびに、次のエラーが突然発生します。

CoreData: 致命的なエラー: セクション情報の永続キャッシュが現在の構成と一致しません。キャッシュを無効にするか、+deleteCacheWithName を使用せずに、NSFetchedResultsController のフェッチ要求、その述語、またはそのソート記述子を不正に変更しました:

コール スタックの最初の 10 項目は次のとおりです。

*** First throw call stack:
(
    0   CoreFoundation                      0x04b835e4 __exceptionPreprocess + 180
    1   libobjc.A.dylib                     0x022c68b6 objc_exception_throw + 44
    2   CoreData                            0x020a1b41 -[NSFetchedResultsController performFetch:] + 913
    3   Syllable                            0x00036aa9 -[RootViewController fetchedResultsController] + 777
    4   Syllable                            0x0003772b -[RootViewController tableView:numberOfRowsInSection:] + 91
    5   UIKit                               0x00d1d240 -[UISectionRowData refreshWithSection:tableView:tableViewRowData:] + 2510
    6   UIKit                               0x00d20b3d -[UITableViewRowData numberOfRows] + 98
    7   UIKit                               0x00ba94c2 -[UITableView noteNumberOfRowsChanged] + 120
    8   UIKit                               0x00ba8e6f -[UITableView reloadData] + 814
    9   UIKit                               0x10378ed1 -[UITableViewAccessibility(Accessibility) reloadData] + 50
    10  UIKit                               0x00bac8d3 -[UITableView _reloadDataIfNeeded] + 65

他にもたくさんありますが、すべて私が投稿した最初のエラーに起因しているようです。それらが役立つ場合は、私に言ってください。投稿します。

しかし、問題は本当に奇妙です。ひょんなことから出てきたようです。git を使用して以前に動作していたバージョンに戻してもクラッシュするため、原因がわかりません。

Stackoverflow に投稿された解決策がありますが、少し不安です。キャッシュを nil に設定すると、アプリからキャッシュ機能が削除されたり、遅くなったりしますか? それはどのような影響をもたらすでしょうか?

アプリの新しい更新に取り組んでおり、最優先事項は、既存/将来のユーザーがクラッシュしないようにすることです。


編集:これが問題の原因だと思います(削除してから問題は解決しませんが):

applicationDidFinishLaunchingAppDelegate に次のコードがあります。これは基本的に、アプリの最初の起動時に Core Data に特別なオブジェクトを作成するのに役立ちます。これを追加した直後に、その後すぐにコードを削除したにもかかわらず、問題が発生したようです。この時点で Core Data を操作するべきではありませんか (早すぎますか)?

// If it's the first time launching, create and add a sample article for an introduction
if ([[[NSUserDefaults standardUserDefaults] objectForKey:@"IsFirstTimeLaunching"] isEqualToString:@"YES"]) {
    NSManagedObjectContext *context = self.managedObjectContext;

    Article *article = [NSEntityDescription insertNewObjectForEntityForName:@"Article" inManagedObjectContext:context];
    article.source = @"text";
    article.body = @"some text";
    article.timeStamp = [NSDate date];

    NSError *error;
    [context save:&error];

    [[NSUserDefaults standardUserDefaults] setObject:@"NO" forKey:@"IsFirstTimeLaunching"];
}

私は AppDelegate にもこのブロックをかなり前から持っていますが、正直なところ、それが正確に何をするのかわかりません。書いたばかりで、完了するのを忘れていた可能性があります...

- (void)applicationDidEnterBackground:(UIApplication *)application
{
    NSManagedObjectContext *context = self.managedObjectContext;
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Article" inManagedObjectContext:context];
    NSFetchRequest *request = [[NSFetchRequest alloc] init];
    [request setEntity:entity];    
}
4

1 に答える 1