0

その中心にある私のアプリは、ユーザーに一連の数値を要求し、コアデータを介してそれらを保存します。次に、私のアプリは、これらすべての数値の平均をユーザーに表示する責任があります。

したがって、ユーザーが新しい番号を入力した後、新しいスレッドを起動し、NSFetchDescriptionインスタンス内のすべてのオブジェクトをフェッチしてそれを自分NSManagedObjectContextで呼び出し、適切な計算を行ってから、のUIを更新する必要があると思います。メインスレッド。

Core Dataの同時実行のルールは、NSManagedObjectContextインスタンスごとに1つのスレッドであることを認識しているので、知りたいのは、アプリを5か月後に爆発させずに、今説明したことを実行できると思いますか?簡単な計算を行うためだけに、まったく新しいコンテキストをインスタンス化する必要はないと思います...

4

2 に答える 2

0

あなたが説明したことに基づいて、CoreDataモデルやモデルに入力された数値を保存してみませんNSMutableArrayか?誰かが以前の計算を見る(そしておそらく修正する)必要がある場合に備えて、将来の検索のためにこれらを保存しているようです。そのシナリオでは、現在の数値のセットが入力された後にフェッチを実行する必要はありません。可変配列を使用して、現在の計算のすべての数値を入力するだけです。数値を入力したら、それをモデルと配列に保存します。ユーザーが平均を確認する準備ができたら、すでに入力されている配列の数値を計算します。ユーザーが以前の計算を変更したい場合は、それらの数値を配列に取得し、そこから作業します。

Context結論として、大規模なデータセット(電話帳の初期シードなど)からモデルを作成する場合を除いて、複数のスレッドを操作してsをマージする必要はありません。を変更し、Contextそのコンテキストでsaveを呼び出すことは、説明しているような小さな変更に対して非常に高速です。

于 2012-12-23T13:21:34.040 に答える
0

特にデータセットのサイズに関して、いくつかのテストを行うことをお勧めします。それがかなり小さい場合、sqliteの呼び出しはかなり速いので、メインキューでの作業をやめることができます。ただし、時間がかかる場合は、メインスレッドから外すのが賢明です。

Appleは、2011年に親と子の管理対象オブジェクトコンテキストの概念を導入して、さまざまなスレッドでのMOコンテキストの使用を容易にしました。CoreDataのWWDCビデオをチェックすることをお勧めします。

フェッチでNSExpressionを使用すると、最小、最大、平均などの非常に高性能な関数を取得できます。ここに適切なリンクがあります。SOには例があります

http://useyourloaf.com/blog/2012/01/19/core-data-queries-using-expressions.html

幸運を!

于 2012-12-23T16:55:39.847 に答える