我有两个核心数据实体Articles
和Favorite
。 Articles
与Favorite
有To-Many关系。首先,我成功插入了所有Articles
个对象。
现在,我正在尝试在“收藏夹”实体中插入ArticleID,但我不能。记录插入时为空关系,或者在“文章”实体中插入新记录。
我认为我应首先在Articles
实体中获取相关记录,然后使用它在Favorite
中插入,但我不知道如何执行此操作。我目前的代码:
NSManagedObjectContext *context =[appDelegate managedObjectContext] ;
favorite *Fav =[NSEntityDescription insertNewObjectForEntityForName:@"favorite" inManagedObjectContext:context];
Articles * Article = [NSEntityDescription insertNewObjectForEntityForName:@"Articles" inManagedObjectContext:context];
NSError *error;
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription
entityForName:@"Articles" inManagedObjectContext:context];
[fetchRequest setEntity:entity];
NSPredicate *secondpredicate = [NSPredicate predicateWithFormat:@"qid = %@",appDelegate.GlobalQID ];
NSPredicate *thirdpredicate = [NSPredicate predicateWithFormat:@"LangID=%@",appDelegate.LangID];
NSPredicate *comboPredicate = [NSCompoundPredicate andPredicateWithSubpredicates:[NSArray arrayWithObjects: secondpredicate,thirdpredicate, nil]];
[fetchRequest setPredicate:comboPredicate];
NSArray *fetchedObjects = [context executeFetchRequest:fetchRequest error:&error];
for (NSManagedObject *info in fetchedObjects) {
// ?????????????????????????
}
}
任何建议都将不胜感激。
答案 0 :(得分:4)
首先,确保Article
和Favorite
之间存在互惠关系,即双向关系。像这样:
Article{
favorites<-->>Favorite.article
}
Favorite{
article<<-->Article.favorites
}
在核心数据中定义互惠关系意味着从一侧设置关系会自动为另一侧设置关系。
因此,要为新创建的Favorite
对象设置新的Article
对象,您只需:
Favorite *fav =[NSEntityDescription insertNewObjectForEntityForName:@"favorite" inManagedObjectContext:context];
Articles *article = [NSEntityDescription insertNewObjectForEntityForName:@"Articles" inManagedObjectContext:context];
[article.addFavoriteObject:fav];
//... or if you don't use custom NSManagedObject subclasses
[[article mutableSetValueForKey:@"favorites"] addObject:fav];
如果Article
对象或Favorite
对象已存在,则首先获取对象,但设置关系的方式完全相同。
关键是确保您具有互惠关系,以便托管对象上下文知道在两个对象中设置关系。
答案 1 :(得分:0)
我通过创建新的Article对象来解决它:
Articles *NewObj = [fetchedObjects objectAtIndex:0];
并使用它来插入关系:
[Fav setFavArticles:NewObj];
[NewObj setArticlesFav:Fav];
非常感谢TechZen ..