在插入之前检查 sqlite 中的重复项(核心数据)

Posted

技术标签:

【中文标题】在插入之前检查 sqlite 中的重复项(核心数据)【英文标题】:Checking for duplicate in sqlite before inserting them (Core data) 【发布时间】:2011-08-04 03:47:19 【问题描述】:

我正在通过核心数据将新对象插入数据库。 在我插入值之前,有什么方法可以检查数据库中是否有任何重复项?

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】:

没有办法免费检查重复项。您需要手动处理用于确定两个对象是否相同的谓词。

最简单的就是使用-[NSMangedObjectContext countForFetchRequest:error:]快速查看对象是否已经存在,因为在count大于0时。

遵循三规则(第三次需要重写时让它通用)我已经为自己做了一些方便的方法来处理这个问题。更具体地说-[NSManagedObjectContext insertNewUniqueObjectForEntityForName:withPredicate:]。如果您想将其用作灵感或按原样使用,它可以在 https://github.com/jayway/CWCoreData 以开源形式获得。

【讨论】:

以上是关于在插入之前检查 sqlite 中的重复项(核心数据)的主要内容,如果未能解决你的问题,请参考以下文章

将对象插入核心数据实体时处理重复项

通过选择插入时,如何在插入表之前检查重复项

在插入 SQLite 之前检查表 B 中的日期是不是介于表 A 中的日期之间

Wordpress:如何以编程方式创建帖子并在之前检查重复项

如何在插入之前加快重复检查?

在表中插入行的副本并检查重复项