2012-04-22 188 views
7

我對Core Data編程非常新穎。我有一個問題,我希望得到一些澄清。如何檢查一個實體是否已經存在於永久存儲中

假如我有一個名爲NSManagedObject Company,具有以下屬性:

  • 的companyName
  • companyEmail
  • companyPhoneNo
  • companyUserName
  • companyPassword

在這對象companyName屬性被索引。

所以,我的問題是,我怎樣才能確保只有條目具有相同的companyName,companyEmail,companyPhoneNo,companyUserName和companyPassword?

我是否需要提出檢查是否有任何具有相同屬性值的記錄,或者是否使用對象ID進行簡單檢查?

謝謝。

回答

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你之前設置的實體。

相關問題