From f0b22ae3c288c34827c8ec02deae21b6ea0e05d2 Mon Sep 17 00:00:00 2001 From: Derek316x Date: Sat, 10 Oct 2015 11:14:02 -0400 Subject: [PATCH] done --- MarsWater/MarsWater.xcodeproj/project.pbxproj | 12 + .../Base.lproj/LaunchScreen.storyboard | 4 +- .../MarsWater/Base.lproj/Main.storyboard | 222 ++++++++++-------- MarsWater/MarsWater/List+CoreDataProperties.h | 24 +- MarsWater/MarsWater/List+CoreDataProperties.m | 6 +- .../ListCreationTableViewController.m | 36 ++- .../MarsWater/ListsTableViewController.m | 34 ++- MarsWater/MarsWater/Task+CoreDataProperties.h | 8 +- MarsWater/MarsWater/Task+CoreDataProperties.m | 8 +- 9 files changed, 231 insertions(+), 123 deletions(-) diff --git a/MarsWater/MarsWater.xcodeproj/project.pbxproj b/MarsWater/MarsWater.xcodeproj/project.pbxproj index a2f82e3..686e6e0 100644 --- a/MarsWater/MarsWater.xcodeproj/project.pbxproj +++ b/MarsWater/MarsWater.xcodeproj/project.pbxproj @@ -7,6 +7,8 @@ objects = { /* Begin PBXBuildFile section */ + 693956881BC95BD2007CFBD3 /* List+CoreDataProperties.m in Sources */ = {isa = PBXBuildFile; fileRef = 693956851BC95BD2007CFBD3 /* List+CoreDataProperties.m */; settings = {ASSET_TAGS = (); }; }; + 693956891BC95BD2007CFBD3 /* Task+CoreDataProperties.m in Sources */ = {isa = PBXBuildFile; fileRef = 693956871BC95BD2007CFBD3 /* Task+CoreDataProperties.m */; settings = {ASSET_TAGS = (); }; }; 8DA86CA91BC1AE57006C50BC /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 8DA86CA81BC1AE57006C50BC /* main.m */; }; 8DA86CAC1BC1AE57006C50BC /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 8DA86CAB1BC1AE57006C50BC /* AppDelegate.m */; }; 8DA86CB21BC1AE57006C50BC /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 8DA86CB01BC1AE57006C50BC /* Main.storyboard */; }; @@ -22,6 +24,10 @@ /* End PBXBuildFile section */ /* Begin PBXFileReference section */ + 693956841BC95BD2007CFBD3 /* List+CoreDataProperties.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "List+CoreDataProperties.h"; sourceTree = ""; }; + 693956851BC95BD2007CFBD3 /* List+CoreDataProperties.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "List+CoreDataProperties.m"; sourceTree = ""; }; + 693956861BC95BD2007CFBD3 /* Task+CoreDataProperties.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "Task+CoreDataProperties.h"; sourceTree = ""; }; + 693956871BC95BD2007CFBD3 /* Task+CoreDataProperties.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "Task+CoreDataProperties.m"; sourceTree = ""; }; 8DA86CA41BC1AE57006C50BC /* MarsWater.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MarsWater.app; sourceTree = BUILT_PRODUCTS_DIR; }; 8DA86CA81BC1AE57006C50BC /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 8DA86CAA1BC1AE57006C50BC /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; @@ -78,6 +84,10 @@ 8DA86CD11BC1B329006C50BC /* Model */, 8DA86CAA1BC1AE57006C50BC /* AppDelegate.h */, 8DA86CAB1BC1AE57006C50BC /* AppDelegate.m */, + 693956841BC95BD2007CFBD3 /* List+CoreDataProperties.h */, + 693956851BC95BD2007CFBD3 /* List+CoreDataProperties.m */, + 693956861BC95BD2007CFBD3 /* Task+CoreDataProperties.h */, + 693956871BC95BD2007CFBD3 /* Task+CoreDataProperties.m */, 8DA86CD21BC1B8E4006C50BC /* ListsTableViewController.h */, 8DA86CD31BC1B8E4006C50BC /* ListsTableViewController.m */, 8DA86CD51BC1B904006C50BC /* ListCreationTableViewController.h */, @@ -188,6 +198,8 @@ 8DA86CB51BC1AE57006C50BC /* MarsWater.xcdatamodeld in Sources */, 8DA86CAC1BC1AE57006C50BC /* AppDelegate.m in Sources */, 8DB2F6EA1BC1E75500E58E65 /* Task+CoreDataProperties.m in Sources */, + 693956891BC95BD2007CFBD3 /* Task+CoreDataProperties.m in Sources */, + 693956881BC95BD2007CFBD3 /* List+CoreDataProperties.m in Sources */, 8DA86CD41BC1B8E4006C50BC /* ListsTableViewController.m in Sources */, 8DB2F6E71BC1E75500E58E65 /* List.m in Sources */, 8DB2F6E91BC1E75500E58E65 /* Task.m in Sources */, diff --git a/MarsWater/MarsWater/Base.lproj/LaunchScreen.storyboard b/MarsWater/MarsWater/Base.lproj/LaunchScreen.storyboard index 2e721e1..900bc17 100644 --- a/MarsWater/MarsWater/Base.lproj/LaunchScreen.storyboard +++ b/MarsWater/MarsWater/Base.lproj/LaunchScreen.storyboard @@ -1,7 +1,7 @@ - + - + diff --git a/MarsWater/MarsWater/Base.lproj/Main.storyboard b/MarsWater/MarsWater/Base.lproj/Main.storyboard index 13ead89..950b639 100644 --- a/MarsWater/MarsWater/Base.lproj/Main.storyboard +++ b/MarsWater/MarsWater/Base.lproj/Main.storyboard @@ -2,6 +2,7 @@ + @@ -18,23 +19,23 @@ - + @@ -70,131 +71,178 @@ - + + + + + + + + + + + + + + + + + + - + - - + + - + - + - + - - + + - - - - - - - + + + + + - + - - + + - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - @@ -202,35 +250,19 @@ - - + + - + - + + - - - - - - - - - - - - - - - - - - + - + diff --git a/MarsWater/MarsWater/List+CoreDataProperties.h b/MarsWater/MarsWater/List+CoreDataProperties.h index 9ce8d06..74c5339 100644 --- a/MarsWater/MarsWater/List+CoreDataProperties.h +++ b/MarsWater/MarsWater/List+CoreDataProperties.h @@ -2,7 +2,7 @@ // List+CoreDataProperties.h // MarsWater // -// Created by Michael Kavouras on 10/4/15. +// Created by Z on 10/10/15. // Copyright © 2015 Michael Kavouras. All rights reserved. // // Choose "Create NSManagedObject Subclass…" from the Core Data editor menu @@ -10,15 +10,31 @@ // #import "List.h" +#import "Task+CoreDataProperties.h" NS_ASSUME_NONNULL_BEGIN @interface List (CoreDataProperties) -@property (nullable, nonatomic, retain) NSString *title; -@property (nullable, nonatomic, retain) NSDate *createdAt; @property (nullable, nonatomic, retain) id color; -@property (nullable, nonatomic, retain) NSArray *task; +@property (nullable, nonatomic, retain) NSDate *createdAt; +@property (nullable, nonatomic, retain) NSString *title; +@property (nullable, nonatomic, retain) NSOrderedSet *task; + +@end + +@interface List (CoreDataGeneratedAccessors) + +- (void)insertObject:(Task *)value inTaskAtIndex:(NSUInteger)idx; +- (void)removeObjectFromTaskAtIndex:(NSUInteger)idx; +- (void)insertTask:(NSArray *)value atIndexes:(NSIndexSet *)indexes; +- (void)removeTaskAtIndexes:(NSIndexSet *)indexes; +- (void)replaceObjectInTaskAtIndex:(NSUInteger)idx withObject:(Task *)value; +- (void)replaceTaskAtIndexes:(NSIndexSet *)indexes withTask:(NSArray *)values; +- (void)addTaskObject:(Task *)value; +- (void)removeTaskObject:(Task *)value; +- (void)addTask:(NSOrderedSet *)values; +- (void)removeTask:(NSOrderedSet *)values; @end diff --git a/MarsWater/MarsWater/List+CoreDataProperties.m b/MarsWater/MarsWater/List+CoreDataProperties.m index 6c70870..db22089 100644 --- a/MarsWater/MarsWater/List+CoreDataProperties.m +++ b/MarsWater/MarsWater/List+CoreDataProperties.m @@ -2,7 +2,7 @@ // List+CoreDataProperties.m // MarsWater // -// Created by Michael Kavouras on 10/4/15. +// Created by Z on 10/10/15. // Copyright © 2015 Michael Kavouras. All rights reserved. // // Choose "Create NSManagedObject Subclass…" from the Core Data editor menu @@ -13,9 +13,9 @@ @implementation List (CoreDataProperties) -@dynamic title; -@dynamic createdAt; @dynamic color; +@dynamic createdAt; +@dynamic title; @dynamic task; @end diff --git a/MarsWater/MarsWater/ListCreationTableViewController.m b/MarsWater/MarsWater/ListCreationTableViewController.m index 0ecf6e9..25ad9e0 100644 --- a/MarsWater/MarsWater/ListCreationTableViewController.m +++ b/MarsWater/MarsWater/ListCreationTableViewController.m @@ -11,9 +11,10 @@ #import "List.h" #import "AppDelegate.h" -@interface ListCreationTableViewController () - -@property (weak, nonatomic) IBOutlet UITextField *titleTextField; +@interface ListCreationTableViewController () +@property (nonatomic) NSMutableOrderedSet *myTasks; +@property (weak, nonatomic) IBOutlet UITextField *textField; +@property (weak, nonatomic) IBOutlet UITextField *taskField; @property (nonatomic) List *list; @@ -39,7 +40,6 @@ - (void)setupNavigationBar { self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemSave target:self action:@selector(save)]; - // set the right button to save } - (void)cancel { @@ -47,17 +47,37 @@ - (void)cancel { } - (void)save { - self.list.title = self.titleTextField.text; + AppDelegate *delegate= [UIApplication sharedApplication].delegate; + if ([self.textField.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]].length==0) { + UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Save Failed" message:@"Set a name" delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil]; + [alert show]; + return; + } + else if([self.taskField.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]].length!=0) { + Task *task = [NSEntityDescription insertNewObjectForEntityForName:@"Task" inManagedObjectContext:delegate.managedObjectContext]; + [task setValue:self.taskField.text forKey:@"taskDescription"]; + self.taskField.text = @""; + [self.myTasks addObject:task]; + } + + [self.list setValue:self.textField.text forKey:@"title"]; + self.list.createdAt = [NSDate date]; - AppDelegate *delegate = [UIApplication sharedApplication].delegate; - [delegate.managedObjectContext save:nil]; + [self.list setValue:self.myTasks forKey:@"task"]; - [self dismissViewControllerAnimated:YES completion:nil]; + [delegate.managedObjectContext save:nil]; + [self cancel]; } - (IBAction)colorButtonTapped:(UIButton *)sender { self.list.color = sender.backgroundColor; } +#pragma mark - Text Field methods +- (BOOL)textFieldShouldReturn:(UITextField *)textField{ + [self.view endEditing:YES]; + return YES; +} + @end diff --git a/MarsWater/MarsWater/ListsTableViewController.m b/MarsWater/MarsWater/ListsTableViewController.m index 8a2659c..d1602f8 100644 --- a/MarsWater/MarsWater/ListsTableViewController.m +++ b/MarsWater/MarsWater/ListsTableViewController.m @@ -19,16 +19,30 @@ @interface ListsTableViewController () @implementation ListsTableViewController + +#pragma mark - lifecycle methods + +- (void)viewWillAppear:(BOOL)animated{ + + NSFetchRequest *fetchRequest = [[NSFetchRequest alloc]initWithEntityName:@"List"]; + fetchRequest.sortDescriptors = @[[[NSSortDescriptor alloc] initWithKey:@"createdAt" ascending:NO]]; + AppDelegate *delegate = [UIApplication sharedApplication].delegate; + + self.fetchedResultsController = [[NSFetchedResultsController alloc]initWithFetchRequest:fetchRequest managedObjectContext:delegate.managedObjectContext sectionNameKeyPath:nil cacheName:nil]; + self.fetchedResultsController.delegate = self; + [self.fetchedResultsController performFetch:nil]; + + [self.tableView reloadData]; +} + - (void)viewDidLoad { [super viewDidLoad]; - AppDelegate *delegate = [UIApplication sharedApplication].delegate; // 1) create an instance of NSFetchRequest with an entity name NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"List"]; - // 2) create a sort descriptor NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:@"createdAt" ascending:NO]; @@ -45,7 +59,6 @@ - (void)viewDidLoad { [self.tableView reloadData]; } - #pragma mark - Table view data source - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { @@ -67,6 +80,21 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N return cell; } +#pragma mark - delete methods + +- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath{ + return YES; +} +- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath{ + + if (editingStyle == UITableViewCellEditingStyleDelete) { + List *listRemoved = self.fetchedResultsController.fetchedObjects[indexPath.row]; + AppDelegate *delegate = [UIApplication sharedApplication].delegate; + [delegate.managedObjectContext deleteObject:listRemoved]; + [self viewWillAppear:YES]; + } +} + - (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type newIndexPath:(NSIndexPath *)newIndexPath { [self.tableView reloadData]; diff --git a/MarsWater/MarsWater/Task+CoreDataProperties.h b/MarsWater/MarsWater/Task+CoreDataProperties.h index 2cc11d7..bc94e16 100644 --- a/MarsWater/MarsWater/Task+CoreDataProperties.h +++ b/MarsWater/MarsWater/Task+CoreDataProperties.h @@ -2,7 +2,7 @@ // Task+CoreDataProperties.h // MarsWater // -// Created by Michael Kavouras on 10/4/15. +// Created by Z on 10/10/15. // Copyright © 2015 Michael Kavouras. All rights reserved. // // Choose "Create NSManagedObject Subclass…" from the Core Data editor menu @@ -15,12 +15,12 @@ NS_ASSUME_NONNULL_BEGIN @interface Task (CoreDataProperties) -@property (nullable, nonatomic, retain) NSString *taskDescription; +@property (nullable, nonatomic, retain) NSDate *completedAt; @property (nullable, nonatomic, retain) NSDate *createdAt; @property (nullable, nonatomic, retain) NSDate *dueAt; -@property (nullable, nonatomic, retain) NSDate *updatedAt; @property (nullable, nonatomic, retain) NSNumber *priority; -@property (nullable, nonatomic, retain) NSDate *completedAt; +@property (nullable, nonatomic, retain) NSString *taskDescription; +@property (nullable, nonatomic, retain) NSDate *updatedAt; @property (nullable, nonatomic, retain) List *list; @end diff --git a/MarsWater/MarsWater/Task+CoreDataProperties.m b/MarsWater/MarsWater/Task+CoreDataProperties.m index 1ea972c..8f60607 100644 --- a/MarsWater/MarsWater/Task+CoreDataProperties.m +++ b/MarsWater/MarsWater/Task+CoreDataProperties.m @@ -2,7 +2,7 @@ // Task+CoreDataProperties.m // MarsWater // -// Created by Michael Kavouras on 10/4/15. +// Created by Z on 10/10/15. // Copyright © 2015 Michael Kavouras. All rights reserved. // // Choose "Create NSManagedObject Subclass…" from the Core Data editor menu @@ -13,12 +13,12 @@ @implementation Task (CoreDataProperties) -@dynamic taskDescription; +@dynamic completedAt; @dynamic createdAt; @dynamic dueAt; -@dynamic updatedAt; @dynamic priority; -@dynamic completedAt; +@dynamic taskDescription; +@dynamic updatedAt; @dynamic list; @end