7

私はコアデータプログラミングに非常に慣れていません。明確にしたい質問があります。

Company次の属性を持つと呼ばれる NSManagedObject があるとします。

  • 会社名
  • 会社の電子メール
  • 会社の電話番号
  • 会社のユーザー名
  • 会社のパスワード

このオブジェクトでは、companyName属性にインデックスが付けられます。

だから、私の質問は、同じcompanyName、companyEmail、companyPhoneNo、companyUserName、およびcompanyPasswordを持つエントリのみがあることを確認するにはどうすればよいですか?

同じ属性値を持つレコードがあるかどうかを確認するためにリクエストを行う必要がありますか?それとも、オブジェクト ID を使用した単純な確認で十分ですか?

ありがとう。

4

2 に答える 2

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。以前に設定したエンティティと一致するエンティティの数を返すだけです。

于 2012-04-22T06:21:24.113 に答える
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

于 2012-04-22T06:03:20.083 に答える