Проверка на наличие дубликатов в sqlite перед их вставкой (основные данные) - PullRequest
2 голосов
/ 04 августа 2011

Я вставляю новые объекты в базу данных по основным данным.Есть ли способ проверить, есть ли дубликаты в базе данных, прежде чем я вставлю значения в?

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);
    }

каждый раз, когда я запускаю приложение, оно снова вставляет значения.я хочу проверить, есть ли какая-либо новая категория в ней, если нет, тогда я добавлю только эту новую.

1 Ответ

1 голос
/ 04 августа 2011

Нет возможности бесплатно проверить наличие дубликатов. Вам нужно вручную обработать предикат, который вы используете для определения того, что два объекта совпадают.

Проще всего использовать -[NSMangedObjectContext countForFetchRequest:error:], чтобы быстро увидеть, существует ли уже объект, так как в подсчете больше 0.

Следуя правилу трех (сделайте это общим в третий раз, когда вам нужно переписать его) Я сделал несколько удобных методов для себя, чтобы справиться с этим. Более конкретно -[NSManagedObjectContext insertNewUniqueObjectForEntityForName:withPredicate:]. Он доступен с открытым исходным кодом на https://github.com/jayway/CWCoreData, если вы хотите использовать его как источник вдохновения или как есть.

...