アプリケーション内で(Core Dataの軽量移行を使用して)推測されたマッピングモデルを作成すると、ランダムにクラッシュします。ちなみに、実行中にアプリケーションでプログラムで実行する必要があります。
これが私がこのモデルを作成する方法です(もちろん、適切なcurrentModelオブジェクトとnewModelオブジェクトを作成した後):
NSMappingModel * mappingModel = [NSMappingModel inferredMappingModelForSourceModel:currentModel destinationModel:newModel error:&error];
問題はこれです:このメソッドはランダムにクラッシュします。それが機能するとき、それは問題なくうまく機能します。しかし、クラッシュすると、アプリケーションがクラッシュします(メソッドが失敗したことを示すためにnilを返す代わりに)。ランダムとは、時々それが起こることもあれば起こらないことも意味します。予測できません。
さて、これが取引です:私はこのメソッドを別のスレッドで実行しています。より正確には、グローバルメインキューで実行するためにGCDを介して渡されるブロック内にあります。UIをユーザーに鮮明に表示するには、これを行う必要があります。つまり、作業の進行中に進行状況インジケーターを表示できるようにするためです。
奇妙なことに、GCDを削除してメインスレッドで実行すると、正常に動作し、クラッシュすることはないようです。したがって、これがクラッシュしているのは、これを別のスレッドで実行しているためでしょうか?
マルチスレッドに関するCoreDataのルールに違反しているとは思わないので、どういうわけかそれは奇妙だと思います。特に、管理対象オブジェクトを渡さず、MOCにアクセスする必要があるときはいつでも、新しいMOCを作成します。つまり、以前に作成されたMOC(またはさらに言えば何でも)に依存しません。メインスレッドに。発生する小さなMOCに加えて、マッピングモデルの作成方法の後、つまりアプリがクラッシュした時点の後に発生するため、ここで検討しているクラッシュの原因となる可能性はありません。
私がしているのは、2つのMOMを取得し、それらの間のマッピングモデルを要求することだけです。糸脱毛の下でもそれは間違いではありません、今それはできますか?
何が起こっているのかについてのアイデアはありますか?