MVC na iOS Tomáš Jukin @Inza
Aug 29, 2014
MVC na iOS
Tomáš Jukin@Inza
www.for-mobile.cz
@forMobileCZ #forMobileCZ
www.srazy.info/for-mobile
Únor 2013 - iOS
www.inovacentrum.cvut.cz/inovajet
Novinky
Prostor pro vás ;)
MVC na iOS
Tomáš Jukin@Inza
MVC na iOSMVC = Model-View-Controller
ale v iOS...
MVC = Massive ViewController
MVC na iOSnejčastěji v praxi:
MVC = Asynchronní načítání dat z internetu do UITableView
MVC na iOSnejčastěji v praxi:
MVC = Asynchronní načítání dat z internetu do UITableView
MVC na iOSnejčastěji v praxi:
MVC = Asynchronní načítání dat z internetu do UITableView pomocí bloků
Byla jednou jedna tabulka...
load data
Byla jednou jedna tabulka...
array
load data
Byla jednou jedna tabulka...
array
load data
Byla jednou jedna tabulka...
array
load data anim. update
Byla jednou jedna tabulka...
array
cache
load data anim. update
Byla jednou jedna tabulka...
array
cache
při update mažu cache...
load data anim. update
Byla jednou jedna tabulka...
controller switch
array
cache
při update mažu cache...
load data anim. update
Byla jednou jedna tabulka...
controller switch
load data anim. update
array
cache
Byla jednou jedna tabulka...
controller switch
array
cache
load data anim. update
na pozadí
Byla jednou jedna tabulka...
load data anim. update
update cache
loadcache
Byla jednou jedna tabulka...
load data anim. update
V C M
Byla jednou jedna tabulka...
load data anim. update
V C MUserItem
...
A co API?
A co API?
programátor
A co API?
A co API?
UITableView iOS API
A co API?
A co API?
???
A co API?
MVC
+
c blocks
Jak na MC?
view
controller
model
ownsload data
Jak na MC?
view
controller
model
ownsload data
app delegate
refresh
vylez z metra
Jak na MC?
view
controller
model
ownsload data
app delegate
na pozadí
Jak na MC?
view
controller
model
ownsload data
iOS kill
zpět
Jak na MC?
view
controller
model
ownsload data
iOS kill
zpět
???
Jak na MC?
view
controller
model
ownsload data
app delegate
kill
zpět
model manager
proxymodel
#pragma mark - Setup Models- (void)setupModelsConfiguration { DEFINE_BLOCK_SELF; self.modelConfigurationRecipe = ^(JMTableViewModel *model, NSString *modelIdentifier) { NSString *defaultModelIdentifier = [blockSelf modelIdentifier]; if ([modelIdentifier isEqualToString:defaultModelIdentifier]) { #pragma mark - Cell Recipe // Cell Configuration (how to pass data from cellModel to cell) model.cellConfigurationRecipe = ^(UITableViewCell *c, JMTableViewCellModel *cM, NSIndexPath *iP) { // ... }; #pragma mark - Preload recipe model.preloadRecipe = ^(NSMutableArray *cache) { /* ... */ }; #pragma mark - Load recipe model.loadRecipe = ^(NSMutableArray *cache, NSArray *loadedObjects) { /* ... */ }; if ([model isKindOfClass:[JMRESTTableViewModel class]]) { JMRESTTableViewModel *restModel = ((JMRESTTableViewModel *)model); __block JMRESTTableViewModel *blockRestModel = restModel; #pragma mark - Parse recipe restModel.parseRecipe = ^(NSMutableArray *cache, id parsedJSONDataObject) { // ... // ...and pass it to loadRecipe block blockRestModel.loadRecipe(cache, section); }; } } else { NSLog(@"Error: ..."); } };}
Next
Next ?Onscreen vs. Offscreen rendering v iOS
KVC, KVO a Cocoa Bindings
Document Oriented Programing v Cocoa
Advanced Cora Data