在核心数据中查找重复值

Pra*_* SP 3 iphone core-data core-data-migration ios ios7

我正在通过核心数据将新对象插入数据库.在插入值之前,有没有办法检查数据库中是否有任何重复?

AccountDetails * newEntry = [NSEntityDescription insertNewObjectForEntityForName:@"AccountDetails" inManagedObjectContext:self.managedObjectContext];   
newEntry.acc_date=date;
newEntry.bank_id=bank_id1;
NSError *error;
    if (![self.managedObjectContext save:&error]) {
        NSLog(@"Whoops, couldn't save: %@", [error localizedDescription]);
        }       
   [self.view endEditing:YES];
Run Code Online (Sandbox Code Playgroud)

每次我运行应用程序时,它会再次重新插入值.我想检查是否有任何新的类别,如果没有,那么我将只添加新的类别.

提前致谢..

Mar*_*rra 7

你可以取,或者你可以数.计数比获取快得多.取决于你想要做什么.

如果您只想插入new和skip重复项,则使用它-[NSManagedObjectContext countForFetchRequest: error:]来确定对象是否存在.

您可以预先构建谓词,只需替换每个循环上的唯一值,这样即使谓词的成本也很低.这是相当高效的,但不是最好的解决方案,因为它会在每个循环上击中磁盘.

另一种选择是将fetch更改为:

  • 只是独特的价值
  • NSDictionary结果

然后从可插入数组中获取所有唯一值到一个字符串数组(例如),然后使用以下命令执行单个提取:

[fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"myUnique in %@", uniqueIDArray]];
Run Code Online (Sandbox Code Playgroud)

然后,你有一个不重复的数组ARE在店里了.当你循环遍历你的对象时,你可以从那里检查那个数组,如果你跳过了那个唯一的,那你就插入了.这将为直接插入或跳过要求产生最佳性能.