0

最近、Core Data モデルに新しいエンティティを追加したので、モデルの新しいバージョンとそのマッピング モデルを作成しました。しかし、私の NSPersistentDocument は明確な理由もなくクラッシュします:

NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption, 
                                                                        [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];

BOOL success = [self configurePersistentStoreCoordinatorForURL:storeURL ofType:typeName modelConfiguration:nil storeOptions:options error:error]; // Line that crashes

コンソール ログ:

*** -[NSCFArray insertObject:atIndex:]: nil を挿入しようとしています

これが役立つ場合のスタックトレースは次のとおりです。 スタックトレース

マッピング モデルを削除しても解決しないので、ドキュメントが間違ったデータ モデルを読み込もうとしたためだと思いますが、特定のデータ モデルを使用する必要があると言う方法が見つかりませんでした。

編集: iOS 用に独自の Core Data 抽象化クラスを使用すると、すべて問題ありません。だから諸悪の根源はNSPersistentDocument. 実際、私は NSDocument に戻りたくないし、Core Data 処理を自分で再度実装する必要はありません。

4

2 に答える 2

0

自動移行または「推測」移行では処理できない変更をモデルに加えた可能性があります。移行をどのように行うべきかを詳述するために、おそらくマッピング モデルを提供する必要があります。

ああ、古いモデルと新しいモデルがバージョン管理されていること、つまりバージョン番号があることを確認してください。そうでない場合、自動移行では、どのモデルが古いモデルでどれが新しいモデルかを判断できません。

于 2011-03-09T15:59:36.420 に答える
0

さて、有効なマネージド オブジェクト モデルを自分で上書き- (id)managedObjectModelして返すことで、機能するようになりました。NSPersistentDocument複数のバージョンを持つモデルの場合、単独でこれを行うことはできないようです。

于 2011-03-09T16:57:51.707 に答える