文档章节

FRC与tableview的联合使用

我是华丽的笨笨
 我是华丽的笨笨
发布于 2015/12/28 12:07
字数 425
阅读 26
收藏 1
#import "CollectTableViewController.h"
#import "VidioEntity.h"
#import "VidioManager.h"
#import "UITableViewCell+Func.h"
#import "MoviePlayerViewController.h"

@interface CollectTableViewController ()

@property (nonatomic, strong) VidioManager * vidioManager;

@property (nonatomic, strong) NSManagedObjectContext * managedObjectContext;

@property (nonatomic,strong)NSFetchedResultsController * fetchedResultsController;

@property (nonatomic, strong) NSArray * collectArray;
@end

@implementation CollectTableViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    self.tableView .rowHeight = UITableViewAutomaticDimension;
    self.tableView.estimatedRowHeight = 200;
    
    self.vidioManager = [VidioManager share];
    //配置FRC
    UIApplication * app = [UIApplication sharedApplication];
    id delegate = [app delegate];
    self.managedObjectContext = [delegate managedObjectContext];
    //设置请求
    NSFetchRequest * requrest = [NSFetchRequest fetchRequestWithEntityName:NSStringFromClass([VidioEntity class])];
    NSSortDescriptor * sort = [NSSortDescriptor sortDescriptorWithKey:@"dateString" ascending:NO];
    [requrest setSortDescriptors:@[sort]];


    self.fetchedResultsController = [[NSFetchedResultsController alloc]initWithFetchRequest:requrest managedObjectContext:self.managedObjectContext sectionNameKeyPath:@"uid" cacheName:nil];
    self.fetchedResultsController.delegate = self;

    NSError * error;
    if (![self.fetchedResultsController performFetch:&error])
    {
        NSLog(@"error = %@",error.localizedDescription);
    }
    
    _collectArray = [self.fetchedResultsController sections];
    
}

#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {

    return _collectArray.count;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    
    id<NSFetchedResultsSectionInfo>sectionInfo = _collectArray[section];
    return [sectionInfo numberOfObjects];
}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    //用实体接收查到的数据
    VidioEntity * vidio = [self.fetchedResultsController objectAtIndexPath:indexPath];
    
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CollectCell" forIndexPath:indexPath];
    
    [cell setCellInfo:vidio];
    
    return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(nonnull NSIndexPath *)indexPath
{
//    UIStoryboard * collect = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
//    UIViewController * viewController = [collect instantiateViewControllerWithIdentifier:@"PlayVidioViewController"];
//    [self setHidesBottomBarWhenPushed:YES];
//    [self.navigationController pushViewController:viewController animated:YES];
//    [self setHidesBottomBarWhenPushed:NO];
    VidioEntity * vidio = [self.fetchedResultsController objectAtIndexPath:indexPath];
    MoviePlayerViewController * movie = [[MoviePlayerViewController alloc]init];
    [movie setValue:vidio forKey:@"vidioEntity"];
    [self presentViewController:movie animated:YES completion:^{
    }];
//    [self.navigationController pushViewController:movie animated:YES];
}

//侧滑删除
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
    if (editingStyle == UITableViewCellEditingStyleDelete)
    {
    //删除数据
        VidioEntity * vidio = [self.fetchedResultsController objectAtIndexPath:indexPath];
        [self.managedObjectContext deleteObject:vidio];
        NSError * error;
        if (![self.managedObjectContext save:&error])
        {
             NSLog(@"%@  %s",error.localizedDescription,__func__);
        }
    }
}


#pragma frc回调机制
- (void)controllerWillChangeContent:(NSFetchedResultsController *)controller {
    [self.tableView beginUpdates];
}


- (void)controller:(NSFetchedResultsController *)controller didChangeSection:(id <NSFetchedResultsSectionInfo>)sectionInfo
           atIndex:(NSUInteger)sectionIndex forChangeType:(NSFetchedResultsChangeType)type {
    
    switch(type) {
        case NSFetchedResultsChangeInsert:
            [self.tableView insertSections:[NSIndexSet indexSetWithIndex:sectionIndex]
                          withRowAnimation:UITableViewRowAnimationFade];
            break;
            
        case NSFetchedResultsChangeDelete:
            [self.tableView deleteSections:[NSIndexSet indexSetWithIndex:sectionIndex]
                          withRowAnimation:UITableViewRowAnimationFade];
            break;
    }
}


- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject
       atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type
      newIndexPath:(NSIndexPath *)newIndexPath {
    
    UITableView *tableView = self.tableView;
    
    switch(type) {
            
        case NSFetchedResultsChangeInsert:
            [tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:newIndexPath]
                             withRowAnimation:UITableViewRowAnimationFade];
            break;
            
        case NSFetchedResultsChangeDelete:
            [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]
                             withRowAnimation:UITableViewRowAnimationFade];
            break;
            
            //如果更新,只更新这一行
        case NSFetchedResultsChangeUpdate:
            [tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
            break;
            
        case NSFetchedResultsChangeMove:
            [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]
                             withRowAnimation:UITableViewRowAnimationFade];
            [tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:newIndexPath]
                             withRowAnimation:UITableViewRowAnimationFade];
            break;
    }
}


- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller {
    [self.tableView endUpdates];
}


© 著作权归作者所有

上一篇: 日历 NSCalendar
下一篇: 视屏播放
我是华丽的笨笨
粉丝 1
博文 16
码字总数 14214
作品 0
石景山
私信 提问
现在想的

现在是大课间时间,我今天教务处值班,晚上要查课,所以现在还没回家,想看个视频吧,又看到到了OSChina,觉得自己应该多谢谢博客来提高自己的表达能力,所以现在就写了。 下午上完第八节的校...

nbl_cs
2016/09/20
14
0
程序员的mysql数据库辅助工具

该数据库辅助工具(1.0)完全开源,是根据自己公司的需求开发的一款数据库辅助工具,该工具主要是辅助程序员快速的查找数据库的字段信息,提高开发效率。 该工具会根据需要随时更新 工具下载地...

jerri
2013/07/29
0
0
每组的头部底部的设置处理

只显示文字的简单方式: - (nullable NSString )tableView:(UITableView )tableView titleForHeaderInSection:(NSInteger)section; // fixed font style. use custom view (UILabel) if you ......

奋斗的青春年华
2016/10/22
8
0
iOS资讯详情页实现—WebView和TableView混合使用

iOS资讯详情页实现—WebView和TableView混合使用 如果要实现一个底部带有相关推荐和评论的资讯详情页,很自然会想到WebView和TableView嵌套使用的方案。 这个方案是WebView作为TableView的T...

Mr_贱贱源源
2018/05/29
0
0
ZHANGBAO/ZBCellConfig

当一个 tableView 中的 cell 类型过多时,我们务必会在 tableView 的各个代理中做这样那样的判断,当需要增加一种 cell,或调换 cell 的顺序的时候我们就会在 tableView 的各个代理中进行修改...

ZHANGBAO
2017/07/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Node.js 多进程处理CPU密集任务

Node.js 单线程与多进程 大家都知道 Node.js 性能很高,是以异步事件驱动、非阻塞 I/O 而被广泛使用。但缺点也很明显,由于 Node.js 是单线程程序,如果长时间运算,会导致 CPU 不能及时释放...

Svend
41分钟前
3
0
Django笔记-3-模型-20190526

简介 django为各种数据库提供了很好的支持,django对这些数据库提供了统一的调用API;可以根据不同的也无需求选择不同的数据库; 配置数据库 在setting.py文件中配置数据库 DATABASES = { ...

Frank1126lin
56分钟前
3
0
OSChina 周日乱弹 —— 程序员做噩梦

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @-冰冰棒- :#今日歌曲推荐# 手嶌葵《Kiss The Girl》 《Kiss The Girl》- 手嶌葵 手机党少年们想听歌,请使劲儿戳(这里) @Sharon啊 :今天...

小小编辑
今天
190
11
Another app is currently holding the yum lock; waiting for it to exit...

Another app is currently holding the yum lock; waiting for it to exit... The other application is: PackageKit Memory : 153 M RSS (266 MB VSZ) Started: Thu Jul 12 00:03......

圣洁之子
今天
2
0
FastDateFormat 研究

FastDateFormat 对缓存的利用,其实就是用ConcurrentHashMap 做了一个map类型的缓存 public F getInstance(final String pattern, TimeZone timeZone, Locale locale) { Validate......

暗中观察
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部