0

何千ものレコードがある場合、メモリにロードせずにすべてのレコードのブール値フラグを更新することは可能ですか?

そうでない場合、sqlite に直接接続してこれを行うことは可能ですか?

私のモデルには、10000 レコードで更新する必要がある IsNew ブール値フラグがあるとします。これを行うためにすべてをメモリにロードしたくありません。

4

2 に答える 2

0

はい、できますが、一度ではできません。
毎回設定された数のアイテムをロードし(N)、それらを更新し、保存し、次のバッチをフェッチするだけです。

あなたの例では、次のようになります。

NSFetchRequest* request = [[NSFetchRequest alloc] initWithEntityName:@"YourEntity"];
[request setPredicate:[NSPredicate predicateWithFormat:@"isNew == YES"]];
[request setFetchLimit:100];
[request setIncludesPropertyValues:YES];
[request setReturnsObjectsAsFaults:NO];
NSArray* batch = nil;
do {
    batch = [context executeFetchRequest:request
                                   error:&error];
    if ([batch count]) {
        [batch setValue:@NO forKey:@"isNew"];
        if (![context save:&error]) {
            batch = nil;
        } else {
            [context reset]; //free memory
        }
    }
} while ([batch count] == batchSize);
//test for errors (batch == nil)

バックグラウンドでこれを行い、変更をメイン コンテキストにマージすることをお勧めします。

于 2013-05-16T06:26:06.097 に答える