有一种用于学习术语和定义的闪存卡模型。 我创建了具有以下属性的实体卡:
packTitle 高清 水平 术语
具有明确主题的集合中的卡具有相同的packTitle,例如动物。 要填充所有可用的packTitles,我得到一个数组
NSArray *arrayOfTitles = [[[fetchedResultsController fetchedObjects]
valueForKey:@"packTitle"]
valueForKeyPath:@"@distinctUnionOfObjects.self"];
获取具有明确packTitle的所有卡片
- (NSArray *) cardsForPackTitle:(NSString * )selectedPackTitle {
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Card" inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:entity];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(packTitle like %@)", selectedPackTitle];
[fetchRequest setPredicate:predicate];
NSError *error;
NSArray *fetchedCards = [managedObjectContext executeFetchRequest:fetchRequest error:&error ];
[fetchRequest release];
return fetchedCards;
}
所有上述工作,但当我需要删除具有明确packTitle的卡时,似乎代码 变得渴望简单的任务。
问题:我是否应该以其他方式构建数据模型?我是Core Data的新手,对不起,如果问题很愚蠢。
答案 0 :(得分:1)
是的,你应该以不同的方式做到这一点。将“动物”重复存放在各种卡片中只是为了表示它们是动物卡片没有多大意义。
你应该(可能)做的是创建另一个名为Pack
的实体。此实体应具有title
属性和cards
一对多关系。然后将cards
关系与您的Card
实体相关联。 (从packTitle
实体中删除Card
属性。)
您还应该阅读Core Data Programming Guide以了解有关核心数据的更多信息。起初有点难以理解,但经过几次阅读和一些练习之后,它才开始变得有意义。