2

コアデータによって新しいオブジェクトをデータベースに挿入しています。値を挿入する前に、データベースに重複があるかどうかを確認する方法はありますか?

for (int i =0;i<[categoryArray count];i++)
    {
        Category * cat = [categoryArray objectAtIndex:i];
        NSEntityDescription *entity = [NSEntityDescription entityForName:@"ICategory" inManagedObjectContext:managedObjectContext];
        NSFetchRequest *request = [[NSFetchRequest alloc] init];
        [request setEntity:entity]; 


        ICategory *catt = (ICategory *)[NSEntityDescription insertNewObjectForEntityForName:@"ICategory" inManagedObjectContext:managedObjectContext];
        [catt setName:cat.name];
        [catt setID:cat.ID];
        [catt setPhoto:cat.photo];
        [catt setSapphireID:event.ID];
        NSLog(@"cattttt have %@", catt);
    }

アプリを実行するたびに、値が再度挿入されます。そこに新しいカテゴリがあるかどうかを確認したい場合は、その新しいカテゴリのみを追加します。

4

1 に答える 1

1

重複を無料でチェックする方法はありません。2 つのオブジェクトが同じであることを判断するために使用する述語を手動で処理する必要があります。

-[NSMangedObjectContext countForFetchRequest:error:]カウントが 0 より大きい場合、オブジェクトが既に存在するかどうかをすばやく確認するのが最も簡単です 。

3 つのルール(3 回目の書き換えが必要な場合は一般化する)に従って、これを処理するための便利なメソッドをいくつか作成しました。より具体的には-[NSManagedObjectContext insertNewUniqueObjectForEntityForName:withPredicate:]。インスピレーションとして、またはそのまま使用したい場合は、 https://github.com/jayway/CWCoreDataでオープン ソースとして入手できます。

于 2011-08-04T15:17:50.770 に答える