• CoreData


      1 #import "ClassController.h"
      2 #import "LOClass.h"
      3 #import "Student.h"
      4 #import "Teacher.h"
      5 #import "AppDelegate.h"
      6 #import "StudentController.h"
      7 @interface ClassController ()
      8 @property (nonatomic,strong) NSMutableArray *classArray;
      9 @property (nonatomic,strong)NSManagedObjectContext *mContext;
     10 @end
     11 
     12 @implementation ClassController
     13 -(NSMutableArray *)classArray
     14 {
     15     if (_classArray == nil) {
     16         _classArray = [NSMutableArray new];
     17     }
     18     return _classArray;
     19 }
     20 - (void)viewDidLoad {
     21     [super viewDidLoad];
     22     AppDelegate *appDelegate = [UIApplication sharedApplication].delegate;
     23     //获取数据管理器类
     24     self.mContext = appDelegate.managedObjectContext;
     25    
     26 }
     27 -(void)viewWillAppear:(BOOL)animated
     28 {
     29     [super viewWillAppear:animated];
     30     [self reloadClass];
     31 }
     32 static NSString *reuseIdentifier = @"cell";
     33 //获取所有班级的方法
     34 -(NSArray *)getAllClass
     35 {
     36     //创建查询请求
     37     NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"LOClass"];
     38     //实体属性
     39     NSEntityDescription *LOClassED = [NSEntityDescription entityForName:@"LOClass" inManagedObjectContext:self.mContext];
     40     fetchRequest.entity = LOClassED;
     41     //排序属性
     42     NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES];
     43     fetchRequest.sortDescriptors = @[sort];
     44     //谓词,不写表示查询所有的
     45     //返回查询结果
     46     return [self.mContext executeFetchRequest:fetchRequest error:nil];
     47 }
     48 
     49 - (IBAction)addClassAction:(UIBarButtonItem *)sender {
     50     //实体描述
     51     NSEntityDescription *classED = [NSEntityDescription entityForName:@"LOClass" inManagedObjectContext:self.mContext];
     52     //创建班级
     53     LOClass *loClass = [[LOClass alloc] initWithEntity:classED insertIntoManagedObjectContext:self.mContext];
     54     //给属性赋值
     55     
     56     loClass.name = [NSString stringWithFormat:@"研%d",arc4random()%20 + 1];
     57     loClass.address = @"金五星商厦蓝鸥科技";
     58     NSSet *studentSet = [NSSet setWithArray:[self studentArray]];
     59     //建立表关系
     60     [loClass addStudentRelation:studentSet];
     61     
     62     //创建老师的实体描述
     63     NSEntityDescription *teacherED = [NSEntityDescription entityForName:@"Teacher" inManagedObjectContext:self.mContext];
     64     Teacher *tea = [[Teacher alloc] initWithEntity:teacherED insertIntoManagedObjectContext:self.mContext];
     65     tea.name = [NSString stringWithFormat:@"王%d",arc4random()%30];
     66     tea.course = @"编程";
     67     //建立与老师的表关系
     68     loClass.techerRelation = tea;
     69     
     70     //保存
     71     NSError *error = nil;
     72     [self.mContext save:&error];
     73     if (error) {
     74         NSLog(@"保存失败,错误:%@",error);
     75     }
     76     //刷新 班级
     77     [self reloadClass];
     78 }
     79 //刷新tableView的班级
     80 -(void)reloadClass
     81 {
     82     [self.classArray removeAllObjects];
     83     [self.classArray addObjectsFromArray:[self getAllClass]];
     84     [self.tableView reloadData];
     85 }
     86 
     87 //随机创建学生
     88 -(NSArray *)studentArray
     89 {
     90     NSInteger count = arc4random()%20 + 11;
     91     NSMutableArray *arr = [NSMutableArray array];
     92     for (int i = 0; i < count; i++) {
     93         NSEntityDescription *studentED = [NSEntityDescription entityForName:@"Student" inManagedObjectContext:self.mContext];
     94         Student *stu = [[Student alloc] initWithEntity:studentED insertIntoManagedObjectContext:self.mContext];
     95         stu.name = [NSString stringWithFormat:@"张%d",arc4random()%50];
     96         stu.age = @(arc4random()%30 + 18);
     97         stu.gender = arc4random()%2?@"":@"";
     98         //添加到数组里
     99         [arr addObject:stu];
    100         
    101     }
    102     return arr;
    103 }
    104 
    105 - (void)didReceiveMemoryWarning {
    106     [super didReceiveMemoryWarning];
    107     // Dispose of any resources that can be recreated.
    108 }
    109 
    110 #pragma mark - Table view data source
    111 
    112 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    113 
    114     return 1;
    115 }
    116 
    117 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    118 
    119     return self.classArray.count;
    120 }
    121 
    122 
    123 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    124     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:reuseIdentifier forIndexPath:indexPath];
    125     LOClass *loClass = self.classArray[indexPath.row];
    126     cell.textLabel.text = loClass.name;
    127     
    128     
    129     return cell;
    130 }
    131 //进行传值
    132 -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
    133 {
    134     StudentController *studentVC = [segue destinationViewController];
    135     NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
    136     studentVC.loClass = self.classArray[indexPath.row];
    137 }
    138 // Override to support conditional editing of the table view.
    139 - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
    140     // Return NO if you do not want the specified item to be editable.
    141     return YES;
    142 }
    143 
    144 
    145 
    146 // Override to support editing the table view.
    147 - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
    148     if (editingStyle == UITableViewCellEditingStyleDelete) {
    149         //1.先从数据库里进行删除
    150         
    151         //创建查询请求
    152         NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"LOClass"];
    153         //创建实体描述
    154         NSEntityDescription *classED = [NSEntityDescription entityForName:@"LOClass" inManagedObjectContext:self.mContext];
    155         //设置查询条件的实体属性
    156         fetchRequest.entity = classED;
    157         //创建查询条件
    158         LOClass *loClass = self.classArray[indexPath.row];
    159         NSString *name = loClass.name;
    160         NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name = %@",name];
    161         //设置查询请求的谓词属性
    162         fetchRequest.predicate = predicate;
    163         //创建排序器 NSSortDescription
    164         NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES];
    165         fetchRequest.sortDescriptors = @[sort];
    166         NSArray *result = [self.mContext executeFetchRequest:fetchRequest error:nil];
    167         for (LOClass *loClass in result) {
    168             [self.mContext deleteObject:loClass];
    169         }
    170         [self.mContext save:nil];
    171         
    172         //2.从内存中删除
    173         [self.classArray removeObjectAtIndex:indexPath.row];
    174         
    175         //3.从视图上删除
    176         [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
    177     } else if (editingStyle == UITableViewCellEditingStyleInsert) {
    178         // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
    179     }
    180 }
    181 
    182 @end
    1 #import <UIKit/UIKit.h>
    2 #import "LOClass.h"
    3 @interface StudentController : UITableViewController
    4 @property (nonatomic,strong) LOClass *loClass;
    5 @end
     1 #import "StudentController.h"
     2 #import "student.h"
     3 #import "AppDelegate.h"
     4 @interface StudentController ()
     5 @property (nonatomic,strong) NSMutableArray *studentArray;
     6 @property (nonatomic,strong) NSManagedObjectContext *mContext;
     7 @end
     8 static NSString *identifier = @"cell";
     9 @implementation StudentController
    10 
    11 - (void)viewDidLoad {
    12     [super viewDidLoad];
    13     AppDelegate *appDelegate = [UIApplication sharedApplication].delegate;
    14     //获取数据管理器类
    15     self.mContext = appDelegate.managedObjectContext;
    16     
    17     self.studentArray = [NSMutableArray arrayWithArray: self.loClass.studentRelation.allObjects];
    18 }
    19 
    20 - (void)didReceiveMemoryWarning {
    21     [super didReceiveMemoryWarning];
    22     // Dispose of any resources that can be recreated.
    23 }
    24 
    25 #pragma mark - Table view data source
    26 
    27 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    28 
    29     return 1;
    30 }
    31 
    32 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    33 
    34     return self.studentArray.count;
    35 }
    36 
    37 
    38 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    39     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier forIndexPath:indexPath];
    40     
    41     Student *stu = self.studentArray[indexPath.row];
    42     cell.textLabel.text = stu.name;
    43     
    44     
    45     return cell;
    46 }
    47 
    48 
    49 
    50 // Override to support conditional editing of the table view.
    51 - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
    52     // Return NO if you do not want the specified item to be editable.
    53     return YES;
    54 }
    55 
    56 
    57 
    58 // Override to support editing the table view.
    59 - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
    60     if (editingStyle == UITableViewCellEditingStyleDelete) {
    61         //创建查询请求
    62         NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"Student"];
    63         //创建实体描述
    64         NSEntityDescription *studentED = [NSEntityDescription entityForName:@"Student" inManagedObjectContext:self.mContext];
    65         //设置查询条件的实体属性
    66         fetchRequest.entity = studentED;
    67         //创建查询条件
    68         Student *student = self.studentArray[indexPath.row];
    69         NSString *name = student.name;
    70         NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name = %@",name];
    71         //设置查询请求的谓词属性
    72         fetchRequest.predicate = predicate;
    73         //创建排序器 NSSortDescription
    74         NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES];
    75         fetchRequest.sortDescriptors = @[sort];
    76         NSArray *result = [self.mContext executeFetchRequest:fetchRequest error:nil];
    77         for (Student *loClass in result) {
    78             [self.mContext deleteObject:loClass];
    79         }
    80         [self.mContext save:nil];
    81         [self.studentArray removeObjectAtIndex:indexPath.row];
    82         [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
    83     } else if (editingStyle == UITableViewCellEditingStyleInsert) {
    84         // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
    85     }   
    86 }
    87 
    88 @end
  • 相关阅读:
    【官网翻译】性能篇(四)为电池寿命做优化——使用Battery Historian分析电源使用情况
    【官网翻译】性能篇(三)为电池寿命做优化——概述
    【官网翻译】性能篇(二)通过线程提高性能
    Mybatis+Struts2的结合:实现用户插入和查找
    在安装mysql出现的错误以及解决方法
    关于PHP的内置服务器的使用
    误用.Net Redis客户端CSRedisCore,自己挖坑自己填
    dotnet代码管理之密钥分离策略
    dotnetcore三大Redis客户端对比和使用心得
    生产环境(基于docker)故障排除? 有感于博客园三番五次翻车
  • 原文地址:https://www.cnblogs.com/DevinSMR/p/5280909.html
Copyright © 2020-2023  润新知