在插入之前检查 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 中的日期之间