2

NSManagedObjectContext の進行状況の保存に関する情報を入手できるかどうか知りたいです。

if (![self.context save:&error]) 
{
    NSLog(@"Unresolved error %@", error);
    [self.context rollback];
    return NO;
}

多くのものを保存する必要があるため、保存に時間がかかる可能性があります...進捗状況をパーセンテージでユーザーに通知する必要があります。

4

2 に答える 2

2

残念ながら、実際には Core Data 保存のプロセスはなく、デバイスによって異なります。たとえば、4S での保存は 3GS よりもはるかに高速です。

あなたができることは、いくつかの保存を行うことです。私はこれを1つのプロジェクトで行いました。私は大量の XML をループしており、20 回のループごとにコンテキストを保存し、プログレス バーを更新していました。これにより、解析と保存のプロセス全体が視覚的に少し速く見えるようになりました。一度に小さなデータのチャンクを保存する方が、最後にコンテキストへのすべての変更を保存するよりも高速だったので、実際にはスピードアップにも役立つかもしれません。最終的にループ内で 17 回の保存というマジック ナンバーが得られました。これは私にとって最速の解析時間でした。

また、アクティビティ ビュー (スピナー) を表示することもできます。これは無期限の方法であるか、保存プロセスに関する視覚的なフィードバックをユーザーに提供します。

于 2012-08-14T14:28:37.447 に答える
1

最も簡単な方法は、MOC に小さなチャンクで変更を加え、それぞれの小さな変更を保存することです。ただし、正確なパーセンテージを計算するには、最初に作業の合計量を知る必要があります... または、適切な推測を行い、進行するたびに合計を更新します。

とにかく、あなたはこのようなことをすることができます...

dispatch_async(some_queue, ^{
    while (workToDo) {
        getSomeWorkToDo();
        doTheCurrentPieceOfWork();
        // Save current piece of work practicing Safe Core Data
        [managedObjectContext performBlock:^{
            if (![managedObjectContext save:&error]) {
                // Handle error
            }
        }];
        computePercentageComplete();
        dispatch_async(dispatch_get_main_queue(), ^{
            // Update the control with the new percent complete
        });
    }
});
于 2012-08-14T16:35:48.387 に答える