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

时间:2011-08-04 03:47:20

标签: xcode core-data nsfetchrequest nsentitydescription

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

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 个答案:

答案 0 :(得分:1)

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

最简单的方法是使用-[NSMangedObjectContext countForFetchRequest:error:]快速查看对象是否已存在,因为计数大于0。

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