diff --git a/MarsWater/.DS_Store b/MarsWater/.DS_Store new file mode 100644 index 0000000..bf63813 Binary files /dev/null and b/MarsWater/.DS_Store differ diff --git a/MarsWater/MarsWater.xcodeproj/project.pbxproj b/MarsWater/MarsWater.xcodeproj/project.pbxproj index a2f82e3..0cd06c0 100644 --- a/MarsWater/MarsWater.xcodeproj/project.pbxproj +++ b/MarsWater/MarsWater.xcodeproj/project.pbxproj @@ -19,6 +19,8 @@ 8DB2F6E81BC1E75500E58E65 /* List+CoreDataProperties.m in Sources */ = {isa = PBXBuildFile; fileRef = 8DB2F6E21BC1E75500E58E65 /* List+CoreDataProperties.m */; }; 8DB2F6E91BC1E75500E58E65 /* Task.m in Sources */ = {isa = PBXBuildFile; fileRef = 8DB2F6E41BC1E75500E58E65 /* Task.m */; }; 8DB2F6EA1BC1E75500E58E65 /* Task+CoreDataProperties.m in Sources */ = {isa = PBXBuildFile; fileRef = 8DB2F6E61BC1E75500E58E65 /* Task+CoreDataProperties.m */; }; + EB6E7B1D1BC5DCC000A07298 /* TaskTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = EB6E7B1C1BC5DCC000A07298 /* TaskTableViewController.m */; settings = {ASSET_TAGS = (); }; }; + EB6E7B251BC5F7C500A07298 /* TableCreationViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = EB6E7B241BC5F7C500A07298 /* TableCreationViewController.m */; settings = {ASSET_TAGS = (); }; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ @@ -43,6 +45,11 @@ 8DB2F6E41BC1E75500E58E65 /* Task.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Task.m; sourceTree = ""; }; 8DB2F6E51BC1E75500E58E65 /* Task+CoreDataProperties.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "Task+CoreDataProperties.h"; sourceTree = ""; }; 8DB2F6E61BC1E75500E58E65 /* Task+CoreDataProperties.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "Task+CoreDataProperties.m"; sourceTree = ""; }; + EB6E7B1B1BC5DCC000A07298 /* TaskTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TaskTableViewController.h; sourceTree = ""; }; + EB6E7B1C1BC5DCC000A07298 /* TaskTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TaskTableViewController.m; sourceTree = ""; }; + EB6E7B231BC5F7C500A07298 /* TableCreationViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TableCreationViewController.h; sourceTree = ""; }; + EB6E7B241BC5F7C500A07298 /* TableCreationViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TableCreationViewController.m; sourceTree = ""; }; + EBC201A01BC75B0E009F719F /* TaskCreationDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TaskCreationDelegate.h; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -76,13 +83,11 @@ isa = PBXGroup; children = ( 8DA86CD11BC1B329006C50BC /* Model */, + 8DA86CB01BC1AE57006C50BC /* Main.storyboard */, 8DA86CAA1BC1AE57006C50BC /* AppDelegate.h */, 8DA86CAB1BC1AE57006C50BC /* AppDelegate.m */, - 8DA86CD21BC1B8E4006C50BC /* ListsTableViewController.h */, - 8DA86CD31BC1B8E4006C50BC /* ListsTableViewController.m */, - 8DA86CD51BC1B904006C50BC /* ListCreationTableViewController.h */, - 8DA86CD61BC1B904006C50BC /* ListCreationTableViewController.m */, - 8DA86CB01BC1AE57006C50BC /* Main.storyboard */, + EB6E7B211BC5ED2000A07298 /* lists */, + EB6E7B221BC5ED3D00A07298 /* task */, 8DA86CB61BC1AE57006C50BC /* Assets.xcassets */, 8DA86CB81BC1AE57006C50BC /* LaunchScreen.storyboard */, 8DA86CBB1BC1AE57006C50BC /* Info.plist */, @@ -115,6 +120,29 @@ name = Model; sourceTree = ""; }; + EB6E7B211BC5ED2000A07298 /* lists */ = { + isa = PBXGroup; + children = ( + 8DA86CD21BC1B8E4006C50BC /* ListsTableViewController.h */, + 8DA86CD31BC1B8E4006C50BC /* ListsTableViewController.m */, + 8DA86CD51BC1B904006C50BC /* ListCreationTableViewController.h */, + 8DA86CD61BC1B904006C50BC /* ListCreationTableViewController.m */, + ); + name = lists; + sourceTree = ""; + }; + EB6E7B221BC5ED3D00A07298 /* task */ = { + isa = PBXGroup; + children = ( + EB6E7B1B1BC5DCC000A07298 /* TaskTableViewController.h */, + EB6E7B1C1BC5DCC000A07298 /* TaskTableViewController.m */, + EB6E7B231BC5F7C500A07298 /* TableCreationViewController.h */, + EB6E7B241BC5F7C500A07298 /* TableCreationViewController.m */, + EBC201A01BC75B0E009F719F /* TaskCreationDelegate.h */, + ); + name = task; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -187,10 +215,12 @@ files = ( 8DA86CB51BC1AE57006C50BC /* MarsWater.xcdatamodeld in Sources */, 8DA86CAC1BC1AE57006C50BC /* AppDelegate.m in Sources */, + EB6E7B1D1BC5DCC000A07298 /* TaskTableViewController.m in Sources */, 8DB2F6EA1BC1E75500E58E65 /* Task+CoreDataProperties.m in Sources */, 8DA86CD41BC1B8E4006C50BC /* ListsTableViewController.m in Sources */, 8DB2F6E71BC1E75500E58E65 /* List.m in Sources */, 8DB2F6E91BC1E75500E58E65 /* Task.m in Sources */, + EB6E7B251BC5F7C500A07298 /* TableCreationViewController.m in Sources */, 8DA86CD71BC1B904006C50BC /* ListCreationTableViewController.m in Sources */, 8DA86CA91BC1AE57006C50BC /* main.m in Sources */, 8DB2F6E81BC1E75500E58E65 /* List+CoreDataProperties.m in Sources */, diff --git a/MarsWater/MarsWater/Base.lproj/Main.storyboard b/MarsWater/MarsWater/Base.lproj/Main.storyboard index 13ead89..5d598ea 100644 --- a/MarsWater/MarsWater/Base.lproj/Main.storyboard +++ b/MarsWater/MarsWater/Base.lproj/Main.storyboard @@ -1,5 +1,5 @@ - + @@ -26,7 +26,7 @@ - + + + + @@ -75,7 +78,7 @@ - + @@ -85,7 +88,7 @@ - + @@ -100,7 +103,7 @@ - + @@ -213,7 +216,96 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/MarsWater/MarsWater/List+CoreDataProperties.h b/MarsWater/MarsWater/List+CoreDataProperties.h index 9ce8d06..ccbccbd 100644 --- a/MarsWater/MarsWater/List+CoreDataProperties.h +++ b/MarsWater/MarsWater/List+CoreDataProperties.h @@ -18,7 +18,7 @@ NS_ASSUME_NONNULL_BEGIN @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) NSOrderedSet *task; @end diff --git a/MarsWater/MarsWater/ListsTableViewController.m b/MarsWater/MarsWater/ListsTableViewController.m index 8a2659c..4112ae0 100644 --- a/MarsWater/MarsWater/ListsTableViewController.m +++ b/MarsWater/MarsWater/ListsTableViewController.m @@ -10,7 +10,7 @@ #import "ListsTableViewController.h" #import "AppDelegate.h" #import "List.h" - +#import "TaskTableViewController.h" @interface ListsTableViewController () @property (nonatomic) NSFetchedResultsController *fetchedResultsController; @@ -72,5 +72,14 @@ - (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id) [self.tableView reloadData]; } +-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{ + TaskTableViewController *tbv = segue.destinationViewController; + NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow]; + List *list = [self.fetchedResultsController objectAtIndexPath:indexPath]; + + tbv.list = list; + tbv.indexPath = indexPath; +} + @end diff --git a/MarsWater/MarsWater/TableCreationViewController.h b/MarsWater/MarsWater/TableCreationViewController.h new file mode 100644 index 0000000..736772b --- /dev/null +++ b/MarsWater/MarsWater/TableCreationViewController.h @@ -0,0 +1,17 @@ +// +// TableCreationViewController.h +// MarsWater +// +// Created by Christian Maldonado on 10/7/15. +// Copyright © 2015 Michael Kavouras. All rights reserved. +// + +#import +#import "TaskCreationDelegate.h" + +@interface TableCreationViewController : UIViewController + +@property (nonatomic, weak) id delegate; + + +@end diff --git a/MarsWater/MarsWater/TableCreationViewController.m b/MarsWater/MarsWater/TableCreationViewController.m new file mode 100644 index 0000000..20843fb --- /dev/null +++ b/MarsWater/MarsWater/TableCreationViewController.m @@ -0,0 +1,71 @@ +// +// TableCreationViewController.m +// MarsWater +// +// Created by Christian Maldonado on 10/7/15. +// Copyright © 2015 Michael Kavouras. All rights reserved. +// + +#import "TableCreationViewController.h" +#import "TaskTableViewController.h" +#import +#import "ListsTableViewController.h" +#import "AppDelegate.h" +#import "Task.h" +#import "List.h" +@interface TableCreationViewController () + +@property (weak, nonatomic) IBOutlet UITextField *taskTextField; + +@property (nonatomic) Task *task; + + +@end + +@implementation TableCreationViewController + + +- (void)viewDidLoad { + [super viewDidLoad]; + + + [self setupNavigationBar]; + + AppDelegate *delegate = [UIApplication sharedApplication].delegate; + + self.task = [NSEntityDescription insertNewObjectForEntityForName:@"Task" inManagedObjectContext:delegate.managedObjectContext]; +} + +- (void)setupNavigationBar { + + self.navigationItem.title = @"Create new task"; + + self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(cancel)]; + + self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemSave target:self action:@selector(save)]; + +} + +- (void)cancel { + [self dismissViewControllerAnimated:YES completion:nil]; +} + +- (void)save { + self.task.taskDescription = self.taskTextField.text; + self.task.createdAt = [NSDate date]; + + AppDelegate *delegate = [UIApplication sharedApplication].delegate; + [delegate.managedObjectContext save:nil]; + + [self.delegate didCreateTask:self.task]; + + [self.navigationController popViewControllerAnimated:YES] ; + + + + // [self.tableview shouldReloadData]; +} + + + +@end diff --git a/MarsWater/MarsWater/TaskCreationDelegate.h b/MarsWater/MarsWater/TaskCreationDelegate.h new file mode 100644 index 0000000..39406a9 --- /dev/null +++ b/MarsWater/MarsWater/TaskCreationDelegate.h @@ -0,0 +1,19 @@ +// +// TaskCreationDelegate.h +// MarsWater +// +// Created by Christian Maldonado on 10/8/15. +// Copyright © 2015 Michael Kavouras. All rights reserved. +// + +#import + + +@class TableCreationViewController; +@class Task; + +@protocol TaskCreationDelegate + +-(void)didCreateTask:(Task *)task; + +@end diff --git a/MarsWater/MarsWater/TaskTableViewController.h b/MarsWater/MarsWater/TaskTableViewController.h new file mode 100644 index 0000000..57a9acc --- /dev/null +++ b/MarsWater/MarsWater/TaskTableViewController.h @@ -0,0 +1,17 @@ +// +// TaskTableViewController.h +// MarsWater +// +// Created by Christian Maldonado on 10/7/15. +// Copyright © 2015 Michael Kavouras. All rights reserved. +// + +#import +#import "List.h" + +@interface TaskTableViewController : UITableViewController + +@property (nonatomic) List *list; +@property (nonatomic) NSIndexPath *indexPath; + +@end diff --git a/MarsWater/MarsWater/TaskTableViewController.m b/MarsWater/MarsWater/TaskTableViewController.m new file mode 100644 index 0000000..d11081e --- /dev/null +++ b/MarsWater/MarsWater/TaskTableViewController.m @@ -0,0 +1,108 @@ +// +// TaskTableViewController.m +// MarsWater +// +// Created by Christian Maldonado on 10/7/15. +// Copyright © 2015 Michael Kavouras. All rights reserved. +// + +#import "TaskTableViewController.h" +#import +#import "ListsTableViewController.h" +#import "AppDelegate.h" +#import "Task.h" +#import "List.h" +#import "TaskCreationDelegate.h" +#import "TableCreationViewController.h" + +@interface TaskTableViewController () + + + +@property (nonatomic) NSFetchedResultsController *fetchedResultsController; + +@end + +@implementation TaskTableViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + + AppDelegate *delegate = [UIApplication sharedApplication].delegate; + + NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"List"]; + + NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"createdAt" ascending:NO]; + + fetchRequest.sortDescriptors = @[sortDescriptor]; + + NSFetchedResultsController *fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:delegate.managedObjectContext sectionNameKeyPath:nil cacheName:nil]; + + fetchedResultsController.delegate = self; + + self.fetchedResultsController = fetchedResultsController; + + [fetchedResultsController performFetch:nil]; + +} +-(void)viewWillAppear:(BOOL)animated{ + [super viewWillAppear:animated]; + + [self.tableView reloadData]; + +} + +#pragma mark - Table view data source + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { + + return 1; +} + +-(void)didCreateTask:(Task *)task{ + self.list = [self.fetchedResultsController objectAtIndexPath:self.indexPath]; + NSMutableOrderedSet *mutableSet = [self.list mutableOrderedSetValueForKey:@"task"]; + [mutableSet addObject:task]; + + [self.list setValue:mutableSet forKey:@"task"]; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { + return self.list.task.count; +} + + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"TaskCellIdentifier" forIndexPath:indexPath]; + + Task *task = self.list.task[indexPath.row]; + cell.textLabel.text = task.taskDescription; + cell.detailTextLabel.text = [task.createdAt description]; + + + + return cell; + + +} + + + - (void)shouldReloadData { + [self.tableView reloadData]; + } +#pragma mark - navigation + + +- (IBAction)moveToTaskCreationPageButton:(UIBarButtonItem *)sender { + + TableCreationViewController *tableCreationVC = [self.storyboard instantiateViewControllerWithIdentifier:@"TableCreationVC"]; + tableCreationVC.delegate = self; + + [self.navigationController pushViewController:tableCreationVC animated:YES]; + +} + + +@end