コアデータがそのデータベースをどのように処理するかについて、私はいくつかのことを考え出すのに苦労しています。具体的な例を挙げて問題を説明します:コアデータの1対多の関係を管理するにはどうすればよいですか?
多くのアカウント(私たちのアドレス)を保持する部署がある場合は、次のスキーマがあるとしましょう。
エディタを使用してCore Dataファイルを作成しました。 CachedDepartmentクラスでは、必要な属性を追加してから、多対多関係を作成しました.CacheAccountの「Departmentプロパティ」に「Inverse」を選択しました.CacheAccountにも属性があり、アドレス」CachedDepartmentの関係
私は(私は残りのあなたに2つのヘッダファイルを与える興味のあるものを含まない。)以下のソースを持っている:
@interface CachedAccount : NSManagedObject {
@private
}
@property (nonatomic, retain) NSNumber * accountID;
@property (nonatomic, retain) NSString * email;
@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) CachedDepartment *department;
@end
@class CachedAccount;
@interface CachedDepartment : NSManagedObject {
@private
}
@property (nonatomic, retain) NSString * departmentID;
@property (nonatomic, retain) NSString * departmentName;
@property (nonatomic, retain) NSSet *addresses;
@end
@interface CachedDepartment (CoreDataGeneratedAccessors)
- (void)addAddressesObject:(CachedAccount *)value;
- (void)removeAddressesObject:(CachedAccount *)value;
- (void)addAddresses:(NSSet *)values;
- (void)removeAddresses:(NSSet *)values;
@end
そして今の質問:
- どのように。アカウントと部門オブジェクトを作成して1対多の関係が確立されるようにする必要がありますか?
- CoreDataGeneratedAccessorsで何をする必要がありますか?作成後、CachedDepartmentの-addAddressesObject関数を呼び出すか、anAccount.department = aDepartmentのようなものを作成する必要があります。
- それぞれの場合でオブジェクトを作成するときに、部門に住所を追加することで住所の二重インスタンスが作成されず保存されないようにするにはどうすればよいですか?
私はこのことについて洞察を深めることができます。
EDIT:
は、次のコードのようなCachedDepartmentエンティティ一見のための新しいオブジェクトを挿入する必要があります。
NSManagedObject *cachedDepartment= [NSEntityDescription
insertNewObjectForEntityForName:@"CachedDepartment"
inManagedObjectContext:[self managedObjectContext]];
/*
set values for failedBankInfo here
*/
NSError *error;
if (![context save:&error]) {
NSLog(@"The following error occured: %@", [error localizedDescription]);
}
が、その後で1対多の関係になりますcachedAccountsのための新しいレコードを追加します新たに挿入されたcachedDepartmentオブジェクトは、そのようなものになる:
NSManagedObject *cachedAccounts = [NSEntityDescription
insertNewObjectForEntityForName:@"CachedAccounts"
inManagedObjectContext:[<b>cachedDepartment managedObjectContext</b>]];
/*
set values for failedBankInfo here
*/
//setting the one-to-many relationship
[cachedDepartment addCachedAccountObject:cachedAccount];
[cachedAccount setCachedDepartment:cachedDepartment];
//
NSError *error;
if (![context save:&error]) {
NSLog(@" couldn't save: %@", [error localizedDescription]);
ありがとうございました!もう1つのことは、managedObjectContext(私の質問でEDITをチェック)を使用する方法です。 ご覧のとおり、[cachedDepartment managedObjectContext]を使用します。 – 32l3n
これは同じです。あなたのアプリケーションには管理対象オブジェクトのコンテキストが1つしかありません(もっと多くのことができますが、今の段階ではそうは思いません!)ので、部門オブジェクトからのものを使用するか、同じオブジェクトの中にいれば、大丈夫です。 – jrturton