0

私のセットアップ:

  • 私のに接続されているwithNSManagedObjectContextNSPrivateQueueConcurrencyTypeNSPersistentStoreCoordinator
  • プライベート コンテキストの子であるwithNSManagedObjectContext型。NSMainQueueConcurrencyType
  • メイン コンテキストの子であるwithNSManagedObjectContext型。NSConfinementConcurrencyType

サーバーからデータをダウンロードするときに、 type のコンテキストにデータを書き込みますNSConfinementConcurrencyType。次に、このコンテキストを保存します。これにより、変更がメイン コンテキストにプッシュされます。次に、変更をプライベート コンテキストにプッシュするメイン コンテキストを保存します。この時点でperformBlock、プライベート コンテキストでメソッドを使用して、すべてを永続ストアに保存します。

これは、デバイスでデバッグするときに問題なく機能します。アプリケーションをアーカイブし、アプリケーションをリリース モードで実行すると、子コンテキストを正常に保存しても、メイン コンテキストは変更を受け取りません。再確認したところ、一時コンテキストは実際にメイン コンテキストにリンクされています (メイン コンテキストは一時コンテキストの親として表示されます)。しかし、一時コンテキストをリリース モードで保存すると、メイン コンテキストに変更が表示されることはありません。なぜこれがデバッグモードでは機能するのにリリースでは機能しないのか、私は困惑しています。

任意の提案/ヘルプをいただければ幸いです。

ありがとう、

グルーミング

編集:デバッグ構成を使用してビルドをアーカイブすると、すべてが期待どおりに機能します。したがって、リリース構成には異なる設定がいくつかあります。見つけたものをまた報告します。

編集 2: 犯人が見つかりました。そのため、保存コンテキストの呼び出しを NSAssert でラップしました (テスト中にエラーをキャッチできるようにするため)。残念ながら、Release 構成では、save 呼び出しを格納していたこれらのアサーション ブロックが取り除かれました。顔の手のひら

4

1 に答える 1

1

NSConfinementConcurrencyType親コンテキストと子コンテキストの概念が登場する前の古いレガシー Core Data 動作です。子コンテキストへのインポートを行う場合、その子は である必要がありますNSPrivateQueueConcurrencyTypeperformBlock:、親子MOC、およびの組み合わせがまったく機能することに驚いていNSConfinementConcurrencyTypeます。

于 2013-03-27T03:14:38.450 に答える