0

英語が下手で申し訳ありません。CoreData の初心者です。

今、NSStringがデータベースに存在するかどうかを調べようとしています.

それには 2 つの方法があります。1 つは NSPredicate を使用してリクエストを行う方法です。

配列カウント >= 1 の場合results、データベースで何かが見つかったことを意味します

[fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"itemid == %@", self.item.itemid]];
 NSError *error = nil;
 NSArray *results = [context executeFetchRequest:fetchRequest error:&error];

もう1つは、配列でループすることです

 for (int i=0; i<=[keyArray count]-1 ; i++) {
            NSString *keyID = [keyArray objectAtIndex:i];
            if ([keyID isEqual:stringToCompare])
                return YES;
                break;
    return NO;
 }

私は現在、最初の方法を使用していますが、誰かアドバイスをいただけますか?

どれがパフォーマンスに最適ですか?ありがとう!

4

2 に答える 2

2

2 番目の方法 (配列ループ) では、すべてのオブジェクトをデータベースから取得する必要があるため、一致するオブジェクトのみを取得する最初の方法よりも遅くなるはずです。

結果セットを 1 つのオブジェクトに制限し、実際にオブジェクトを取得する代わりに 使用することにより、指定されたキーを持つオブジェクト の存在のみに関心がある場合は、最初の方法を改善することもできます。countForFetchRequest

[fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"itemid == %@", self.item.itemid]];
[fetchRequest setFetchLimit:1];
NSUInteger count = [context countForFetchRequest:fetchRequest error:&error];
if (count == NSNotFound)
    // some error occurred
else if (count == 0)
    // no matching object
else
    // at least one matching object exists
于 2013-09-10T05:29:50.890 に答える