【问题标题】:Checking for duplicate in sqlite before inserting them (Core data)在插入之前检查 sqlite 中的重复项(核心数据)
【发布时间】: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);
    }

每次我运行应用程序时,它都会重新插入值。我想检查其中是否有任何新类别,如果没有,那么我将仅添加该新类别。

【问题讨论】:

    标签: xcode core-data nsfetchrequest nsentitydescription


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-04
      相关资源
      最近更新 更多