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