blob: 40dd7cf800853750352e2b70d9eca0deea7e826d [file] [log] [blame] [edit]
//
// EmployeeViewController.m
// StoreMadApp
//
// Created by Andrew Smith on 7/8/13.
// Copyright (c) 2013 Burgess. All rights reserved.
//
#import "EmployeeViewController.h"
#import "Employee.h"
#import "EmployeeController.h"
#import <StoreMad/SMContextObserverController.h>
@interface EmployeeViewController ()
@property (nonatomic, weak) IBOutlet UILabel *firstNameLabel;
@property (nonatomic, weak) IBOutlet UILabel *lastNameLabel;
@property (nonatomic, weak) IBOutlet UILabel *hireDateLabel;
@property (nonatomic, weak) IBOutlet UILabel *fireDateLabel;
@property (nonatomic, weak) IBOutlet UILabel *longRunningLabel;
@property (nonatomic, weak) IBOutlet UIActivityIndicatorView *activity;
@property (nonatomic, strong) id observer;
@property (nonatomic, strong) id longObserver;
@property (nonatomic, strong) NSOperationQueue *asyncQueue;
@end
@implementation EmployeeViewController
- (void)dealloc
{
[[SMContextObserverController defaultController] removeContextObserver:self.observer];
[[SMContextObserverController defaultController] removeContextObserver:self.longObserver];
}
+ (EmployeeViewController *)newEmployeeViewControllerFromStorybaord
{
UIStoryboard *employeeStoryboard = [UIStoryboard storyboardWithName:[self description]
bundle:nil];
EmployeeViewController *employeeVC = [employeeStoryboard instantiateViewControllerWithIdentifier:[self description]];
return employeeVC;
}
- (void)viewDidLoad
{
[super viewDidLoad];
[self configureWithEmployee:_employee];
self.longRunningLabel.hidden = YES;
[self.activity stopAnimating];
//
// Long running job observer
//
_asyncQueue = [[NSOperationQueue alloc] init];
__weak EmployeeViewController *weakSelf = self;
self.longObserver = [[SMContextObserverController defaultController] addContextObserverForChangesToObject:_employee
queue:_asyncQueue
workBlock:^(NSManagedObject *object) {
[weakSelf startLongRunningTask];
}];
}
- (void)configureWithEmployee:(Employee *)employee
{
self.firstNameLabel.text = employee.firstName;
self.lastNameLabel.text = employee.lastName;
self.hireDateLabel.text = employee.hireDate.description;
_fireDateLabel.hidden = !employee.isFired;
[self performSelectorInBackground:@selector(createObserver) withObject:nil];
self.employee = employee;
}
- (void)createObserver
{
if (!_observer) {
__weak EmployeeViewController *weakSelf = self;
self.observer = [[SMContextObserverController defaultController] addContextObserverForChangesToObject:_employee
workBlock:^(NSManagedObject *object) {
[weakSelf configureWithEmployee:weakSelf.employee];
}];
}
}
#pragma mark - IBAction
- (IBAction)fireEmployee:(id)sender
{
[EmployeeController fireEmployee:self.employee
completion:^{
NSLog(@"FIRED!");
}];
}
- (IBAction)hireEmployee:(id)sender
{
[EmployeeController hireEmployee:self.employee
completion:^{
NSLog(@"Hired!");
}];
}
#pragma mark -
- (void)startLongRunningTask
{
dispatch_async(dispatch_get_main_queue(), ^{
self.longRunningLabel.hidden = NO;
[self.activity startAnimating];
});
//
// Sleep the current thread to demo passing in NSOperationQueue to observer
//
sleep(3);
dispatch_async(dispatch_get_main_queue(), ^{
self.longRunningLabel.hidden = YES;
[self.activity stopAnimating];
});
}
@end