使用NSFetchedResultsController和UITableView显示CoreData的数据时,如果用relationship作为分组的关键字。比如Contact和Group两个实例如下图:

在显示的时候,创建NSFetchedResultsController

/*     Set up the fetched results controller.*/// Create the fetch request for the entity.    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];// Edit the entity name as appropriate.    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Contact" inManagedObjectContext:self.managedObjectContext];    [fetchRequest setEntity:entity];

// Set the batch size to a suitable number.    [fetchRequest setFetchBatchSize:20];

// Edit the sort key as appropriate.//NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"GName" ascending:NO];//    NSSortDescriptor *sd1 = [NSSortDescriptor sortDescriptorWithKey:@"grp" ascending:YES comparator:^(id obja, id objb){//        Group *aa = obja;//        Group *bb = objb;//        NSNumber *aaa = aa.gid;//        NSNumber *bbb = bb.gid;//        return [aaa compare:bbb];//    }];//    NSSortDescriptor *sd2 = [NSSortDescriptor sortDescriptorWithKey:@"Online" ascending:YES comparator:^(id obja, id objb){//        NSNumber *aa = obja;//        NSNumber *bb = objb;//        return [aa compare:bb];//    }];

//    NSArray *ary = nil;//    NSArray *a = [ary sortedArrayUsingComparator:^(id obja, id objb){//        NSNumber *a = obja;//        NSNumber *b = objb;//        return [a compare:b];//    }];    NSSortDescriptor *sd1 = [NSSortDescriptor sortDescriptorWithKey:@"grp" ascending:YES comparator:^(id obja, id objb){        Group *ga = obja;        Group *gb = objb;return [ga.Name compare:gb.Name];    }];

//NSSortDescriptor *sd1 = [NSSortDescriptor sortDescriptorWithKey:@"GName" ascending:YES];

    NSSortDescriptor *sd2 = [NSSortDescriptor sortDescriptorWithKey:@"Online" ascending:YES];    NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sd1, sd2, nil];

    [fetchRequest setSortDescriptors:sortDescriptors];

// Edit the section name key path and cache name if appropriate.// nil for section name key path means "no sections".    NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:@"grp" cacheName:nil];    aFetchedResultsController.delegate = self;    self.fetchedResultsController = aFetchedResultsController;

    [aFetchedResultsController release];    [fetchRequest release];// [sortDescriptor release];    [sortDescriptors release];

    NSError *error = nil;if (![fetchedResultsController_ performFetch:&error]) {/*         Replace this implementation with code to handle the error appropriately.

         abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. If it is not possible to recover from the error, display an alert panel that instructs the user to quit the application by pressing the Home button.*/        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);        abort();    }

当显示出来以后,如果添加一行新的数据到Contact中,并且属于一个已经存在的组GA,代码如下:

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

    NSEntityDescription *en = [NSEntityDescription entityForName:@"Group" inManagedObjectContext:self.managedObjectContext];    NSPredicate *p = [NSPredicate predicateWithFormat:@"Name=%@", @"GA"];    [fr setEntity:en];    [fr setPredicate:p];    NSArray *ary = [self.managedObjectContext executeFetchRequest:fr error:nil];if (ary.count>0) {        Group *g = [ary objectAtIndex:0];

        Contact *c = (Contact*)[NSEntityDescription insertNewObjectForEntityForName:@"Contact" inManagedObjectContext:self.managedObjectContext];        [self.managedObjectContext lock];        c.Passport = @"New Cnt";        c.GName = g.Name;        c.Online = [NSNumber numberWithInt:3];        [g addCntObject:c];        [self.managedObjectContext save:nil];        [self.managedObjectContext unlock];

//[self.fetchedResultsController performFetch:nil];//[self.tableView reloadData];    }

如果不加最后的两行。那么UITableView将会新建一个分组,并且其中只有一行数据。重新启动程序的时候这一行又会显示在GA分组中,那两句代码就是解决方案。

NSFetchedResultsController和UITableView显示CoreData的数据时用relationship分组的方法相关推荐

  1. 解决 el-autocomplete 不显示及没数据时闪一下的问题

    解决 el-autocomplete 不显示及没数据时闪一下的问题 参考文章: (1)解决 el-autocomplete 不显示及没数据时闪一下的问题 (2)https://www.cnblogs. ...

  2. mysql5.7导出数据_mysql5.7导出数据时出现--secure-file-priv选项应对方法

    mysql5.7导出数据时出现--secure-file-priv选项应对方法 发布时间:2020-05-06 16:27:48 来源:亿速云 阅读:207 作者:三月 下文主要给大家带来mysql5 ...

  3. SAP Spartacus table里显示较长数据时自动显示省略号的设置

    如下图所示:当table cell的值较长无法完整显示时,右部的值会被截断,以省略号代替. 这个行为是通过.scss里text-overflow: ellipsis设置实现的: 在Chrome开发者工 ...

  4. c# combobox集合数据不显示_excel打开数据时显示乱码/问号amp;看起来一样却v不出来怎么办...

    1.乱码问题: 今天正好碰到这种情况,想起来写一写. 有时从客户那里拿到的CSV等文件,直接用excel打开是这样的: 其实观察一下会发现?的地方一般就是中文,实质上是中文字符显示不出来.有小伙伴一直 ...

  5. mysql双重分组没有值也要显示_mysql 统计数据,按照日期分组,把没有数据的日期也展示出来...

    因为业务需求,要统计每天的新增用户并且要用折线图的方式展示. 如果其中有一天没有新增用户的话,这一天就是空缺的,在绘制折线图的时候是不允许的,所有要求把没有数据的日期也要在图表显示. 查询2019-0 ...

  6. 删除SQL表数据时存在约束的解决方法

    这几天在做项目时,清除库中的数据,但是各表之间都存在约束关系,无法使用 ' truncate table 表名 '语句进行操作,通过查询资料,找到了解决方法,当表之间存在约束关联时,想要执行trunc ...

  7. navicat MySQL 导出数据时出现1577错误解决方法

    问题描述: Navicat for MySQL导出任何一个数据库,都会提示:1577 – Cannot proceed because system tables used by Event Sche ...

  8. .ajax显示加载动画,jQuery Ajax 加载数据时异步显示加载动画

    ajax加载后台数据就不说的那么细了. 看下面代码首先前台上放置代码 在js脚本文件中首先把这个图片动画隐藏 代码如下 $(document).ready(function () { $(" ...

  9. arcgis 出图背景_ArcGIS中导出数据时老显示导出失败,显示“保存对象时出错”什么原因?...

    当我们将数据导出出,有时会导出失败,弹出以下对话框,显示"保存对象时出错" 很多人一度怀疑是自己的数据或者软件出现了问题 因为在别人的电脑上同样的步骤操作成功了 那么究竟是什么原因 ...

最新文章

  1. yolov3 pytorch错误集合
  2. MediaWiki初探:安装及使用入门
  3. Matlab--Monte Carlo simulation
  4. 判断回文和查询最大公共字符串
  5. Python数据分析《黑客帝国》-一切都不是偶然
  6. 游戏脚本代码大全_如何用5行Python代码写出刷分游戏脚本!Python真牛!
  7. Java使用PDFBox将一个 PDF 文档拆分为多个 PDF
  8. php seek_cur,Golang中seek使用方法详解
  9. postman数据保存在哪里_Postman教程——使用数据文件
  10. 【​观察】数据驱动零售变革 重塑消费体验是关键
  11. 怎么获得红米手机5 Plus的Root超级权限
  12. 手撸架构,Kafka 面试42问
  13. MES系统读取MySQL数据_MES系统数据库
  14. 迪文DGUS智能屏如何轻松实现3D动画
  15. 遮挡人脸识别:基于Python3.8+Tensorflow2.2人脸遮挡情况的人脸识别
  16. 基于HCL的xx大学校园网设计与配置
  17. 京东2017校园招聘数据与算法方向笔试题
  18. 螺栓、螺钉、螺柱的材料及机械性能
  19. 离线对活动目录数据库进行碎片整理
  20. 非侵入式负荷分解方法

热门文章

  1. mac上搭建vue环境及webstorm新建vue项目
  2. 基于Arduino开发的智能蓝牙小车
  3. linux ssh终端解决中文乱码的问题
  4. BZOJ2038: [2009国家集训队]小Z的袜子(hose)
  5. Java向前引用容易出错的地方
  6. History(历史)命令用法 15 例
  7. JAVA网络编程Socket常见问题 【长连接专题】
  8. Java、Apache Tomcat下载与安装及环境变量配置
  9. 优动漫PAINT-草地教程
  10. thinkphp gd 添加文字