iphone - 核心数据一对多关系: List all related objects as section header in UITableView

标签 iphone objective-c cocoa-touch core-data uikit

我在 iPhone 上的 Core Data 上遇到了以下问题: 我在核心数据中有一对多关系。假设实体称为配方和类别。一个类别可以有很多食谱。 我成功地获取了 UITableView 中列出的所有食谱,并带有以类别命名的节标题。 我想要实现的是将所有类别列为节标题,即使是那些没有食谱的类别:

category1   <--- this one should be displayed too
category2
     recipe_x
     recipe_y
category3
     recipe_z

 NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];

 NSEntityDescription *entity = [NSEntityDescription entityForName:@"Recipe" inManagedObjectContext:managedObjectContext];
 [fetchRequest setEntity:entity];
 [fetchRequest setFetchBatchSize:10];

 NSSortDescriptor *sortDescriptor1 = [[NSSortDescriptor alloc] initWithKey:@"category.categoryName" ascending:YES];
 NSSortDescriptor *sortDescriptor2 = [[NSSortDescriptor alloc] initWithKey:@"recipeName" ascending:YES];
 NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor1,sortDescriptor2, nil];

 [fetchRequest setSortDescriptors:sortDescriptors];
 NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:managedObjectContext sectionNameKeyPath:@"category.categoryName" cacheName:@"Recipes"];

利用核心数据实现这一目标的最优雅的方法是什么?

最佳答案

如果部分中没有行,则实际上并不打算显示这些部分。这就是 UITableView 的设计方式。如果您真的想要强制执行它,则需要向数据源调用-numberOfRowsForSection:添加逻辑,以使其看起来总是有一行,然后您就可以玩使用 -heightForRowAtIndexPath: 尝试隐藏该行。

话虽如此,这是一个糟糕的想法。让这些部分像设计时那样隐藏起来。

关于iphone - 核心数据一对多关系: List all related objects as section header in UITableView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2337167/

相关文章:

ios - 如何在 swift3 中增加 String.Index?

objective-c - 如何控制NSNumberFormatter的科学风格?

iphone - MotionEnded 被多次调用

iphone - NSCheckingResult 范围属性未设置为 {NSNotfound,0}?

ios - 是否可以在iOS中使用第三方音频单元?

iphone - 如何实现类似 Spotify 的 iOS 应用侧边栏功能

ios - 如何使用 Xcode 6 在真实的 iPhone 上测试 App?

iphone - 是否可以通过 App Store 分发 iPhone Web 应用程序?

iphone - iPhone的Obj-C程序中的问题Exc_Arithmetic

ios - 如何定义预处理器宏来检查 iOS 版本