母と子の 2 つのエンティティがあります。母にはそのプロパティがあり、子として NSSet があります。子にはそのプロパティがあり、それ以外には母親のプロパティがあります。したがって、関係 1-n があります。この時点で、マザーはすでに保存され、永続化されています。新しい子を挿入する必要があるため、次のコードを試します。
-(void)addChild:(NSString *)name {
// get Child instance to save
Child *child = (Child*) [NSEntityDescription insertNewObjectForEntityForName:@"Child" inManagedObjectContext:self.managedObjectContext];
mother
// get Mother element to associate
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Mother" inManagedObjectContext:self.managedObjectContext];
[request setEntity:entity];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"mother_desc = %@", @"themothertofind"];
[request setPredicate:predicate];
id sortDesc = [[NSSortDescriptor alloc] initWithKey:@"mother_desc" ascending:YES];
[request setSortDescriptors:[NSArray arrayWithObject:sortDesc]];
NSError *error = nil;
NSArray *fetchResults = [self.managedObjectContext executeFetchRequest:request error:&error];
if (fetchResults == nil) {
NSLog(@"%@", [error description]);
}
else {
// id mother exist associate to Child
[child setMother:[fetchResults objectAtIndex:0]];
NSLog(@"Mother: %@", Child.mother.mother_desc);
}
[child setName:name];
if (![self.managedObjectContext save:&error]) {
NSLog(@"%@", [error description]);
}
}
ログを使用すると、すべてのデータの一貫性がわかります。残念ながら、制約例外 (19) が発生します。CoreData がマザー オブジェクトを再度保存しようとした場合と同様です。
誰かがコードのどこにエラーがあるかを見ることができますか?
ありがとう!
@class Mother;
@interface Child : NSManagedObject
@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) Mother *mother;
@end
@class Child;
@interface Mother : NSManagedObject
@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) NSSet *children;
@end
@interface Mother (CoreDataGeneratedAccessors)
- (void)addChildrenObject:(Child *)value;
- (void)removeChildrenObject:(Child *)value;
- (void)addChildren:(NSSet *)values;
- (void)removeChildren:(NSSet *)values;
@end