2012-04-22 7 views
7

私はコアデータプログラミングにとって非常に新しいものです。私はいくつかの説明を得ることを望む質問があります。この中エンティティが永続ストアに既に存在するかどうかを確認する方法

  • のcompanyName
  • companyEmail
  • companyPhoneNo
  • companyUserName
  • companyPassword

:私は次の属性で、CompanyをNSManagedObjectと呼ばれていると仮定すると

オブジェクト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あなたが前に設定され一致するエンティティの数を返します。

1

あなたが重複なしで保存維持するための2つのオプションがあります。

  1. は、インサートにフェッチしてください。
  2. すべての新しいデータを挿入し、保存する前に複製を削除します。

もっと速くて便利なものは何ですか?おそらく最初の方法。しかし、Instrumentsを使ってテストし、アプリに適した方法を見つけてください。

ここにはこの質問に関するドキュメントがあります。 http://developer.apple.com/library/mac/ipad/#documentation/Cocoa/Conceptual/CoreData/Articles/cdImporting.html#//apple_ref/doc/uid/TP40003174-SW1

関連する問題