如果您设置索引卡与标签(或其他)的一对多关系,则获取的索引卡对象应该具有标签的 NSSet 作为属性。其他人也一样,您应该能够获取集合的计数并将其显示在每个适当的图标旁边。
..除非我误解了你的问题。
编辑:要回答第二部分,您确实应该在 cellForRowAtIndex 路径中有一个条件来检查每个集合的计数,或者只用图标显示它(然后可能有 0,这通常很好),或者检查它是否是0 并隐藏图像,如果它是你说的。我认为这两种解决方案都不会减慢您的应用程序的速度,因为在呈现单元格时无论如何都已经获取了数据,但是您直接通过计数而不检查它是否为 0 的解决方案通常总体上会很快.
编辑以提供一些示例代码:
您的核心数据模型将有一个 IndexCard 实体,然后为每种类型的可能相关对象提供一个实体。
1)型号:
IndexCard - 与每个其他实体具有一对多的关系
标签
地点
人
2)创建此模型和相应的 Object 类后,您将得到一个 IndexCard 类,其标题中包含以下内容
@property (nonatomic, strong) NSSet *tags
@property (nonatomic, strong) NSSet *locations
@property (nonatomic, strong) NSSet *people
当然还有以下实现
@dynamic tags
@dynamic locations
@dynamic people
3)现在我们已经建立了这个核心数据模型,我们可以执行一个nsfetchrequest(当然,当使用一个tableview时,你应该使用一个nsfetchedresultscontroller,因为它会在你滚动表格时动态地获取它需要的IndexCards)。此代码假定我们在其范围内有一个可用的 NSManagedObjectContext(理想情况下是从 AppDelegate 传入并设置为 ivar),并且我们的 IndexCard 对象具有某种我们可以搜索的键/id 属性,我们称之为“数字”
NSNumber *numberWeWant = [NSNumber numberWithInt:1];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
request.entity = [NSEntityDescription entityForName:@"IndexCard" inManagedObjectContext:ourContext];
request.predicate = [NSPredicate predicateWithFormat:@"number == %@", numberWeWant];
NSError *error = nil;
NSArray *results = [context executeFetchRequest:request error:&error];
//didn't bother error checking in case no IndexCard matches
IndexCard *ourCard = [results lastObject];
//you can now use these to display in the cell or hide the appropriate icons if they = 0
int numTags = ourCard.tags.count;
int numLocations = ourCard.locations.count;
int numPeople = ourCard.people.count;
//just a sample of how we would access the individual related objects
for(Tag *tag in ourCard.tags)
{
//do whatever you want with each tag here
}
同样,此代码仅用于获取单个 IndexCard。在实际表中,您将在加载包含它的视图时初始化 nsfetchedresultscontroller,然后仅在 cellForRowAtIndexPath 中与 IndexPath.row 匹配的位置访问 IndexCard。
这也假设 IndexCard 可以关联的对象类型有限。如果类型可以随机更改和增加,则需要修改此方法。
希望这会有所帮助。