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

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

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

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

于 2011-08-04T15:17:50.770 回答