2012-04-22 4 views
7

Я очень новичок в программировании основных данных. У меня есть вопрос, на который я надеюсь получить некоторые разъяснения.Как проверить, существует ли сущность в постоянном хранилище

Предположив У меня есть NSManagedObject под названием Company, со следующими атрибутами:

  • COMPANYNAME
  • companyEmail
  • companyPhoneNo
  • companyUserName
  • companyPassword

В этом объект индексируется атрибут companyName.

Итак, мой вопрос: как я могу убедиться, что будет только запись с той же фирмойName, компанией Email, companyPhoneNo, companyUserName и companyPassword?

Должен ли я сделать запрос для проверки наличия каких-либо записей с одинаковыми значениями атрибутов или простой проверки с идентификатором объекта?

Спасибо.

ответ

13

Вот пример может быть поможет:

NSError * error; 
NSFetchRequest * fetchRequest = [[NSFetchRequest alloc] init]; 
[fetchRequest setEntity:[NSEntityDescription entityForName:NSStringFromClass([self class]) 
            inManagedObjectContext:managedObjectContext]]; 
[fetchRequest setFetchLimit:1]; 

// check whether the entity exists or not 
// set predicate as you want, here just use |companyName| as an example 
[fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"companyName == %@", companyName]]; 

// if get a entity, that means exists, so fetch it. 
if ([managedObjectContext countForFetchRequest:fetchRequest error:&error]) 
    entity = [[managedObjectContext executeFetchRequest:fetchRequest error:&error] lastObject]; 
// if not exists, just insert a new entity 
else entity = [NSEntityDescription insertNewObjectForEntityForName:NSStringFromClass([self class]) 
              inManagedObjectContext:managedObjectContext]; 
[fetchRequest release]; 

// No matter it is new or not, just update data for |entity| 
entity.companyName = companyName; 
// ... 

// save 
if (! [managedObjectContext save:&error]) 
    NSLog(@"Couldn't save data to %@", NSStringFromClass([self class])); 

Совет: countForFetchRequest:error: не принести объект на самом деле, он просто возвращает количество объектов, которые соответствуют predicate вы установили ранее.

1

У вас есть два варианта сохранения хранить, без дублей:

  1. Make Fetch в вкладышем.
  2. Вставьте все новые данные, а затем удалите дубликаты перед сохранением.

Что происходит быстрее и удобнее? Предположительно первый путь. Но лучше проверить его с помощью инструментов и найти правильный способ для своего приложения.

Вот документы по этому вопросу. http://developer.apple.com/library/mac/ipad/#documentation/Cocoa/Conceptual/CoreData/Articles/cdImporting.html#//apple_ref/doc/uid/TP40003174-SW1

Смежные вопросы