mvc na ios - for-mobile 2/2013

41
MVC na iOS Tomáš Jukin @Inza

Upload: tomas-jukin

Post on 29-Aug-2014

535 views

Category:

Technology


2 download

DESCRIPTION

Slidy z mé prezentace na téma "MVC na iOS - Možný pohled na modely s načítáním dat do UITableView na pozadí pomocí bloků", která proběhla na For-Mobile iOS v říjnu 2013 v prostorách InovaJet na Dejvické. Více o události For-Mobile: http://srazy.info/for-mobile/3153 #forMobileCZ

TRANSCRIPT

Page 1: MVC na iOS - For-Mobile 2/2013

MVC na iOS

Tomáš Jukin@Inza

Page 3: MVC na iOS - For-Mobile 2/2013

www.for-mobile.cz

@forMobileCZ #forMobileCZ

www.srazy.info/for-mobile

Únor 2013 - iOS

Page 5: MVC na iOS - For-Mobile 2/2013

www.iknow.eu/cvut/

imagination idea innovation

Page 8: MVC na iOS - For-Mobile 2/2013

Novinky

Prostor pro vás ;)

Page 9: MVC na iOS - For-Mobile 2/2013

MVC na iOS

Tomáš Jukin@Inza

Page 10: MVC na iOS - For-Mobile 2/2013

MVC na iOSMVC = Model-View-Controller

ale v iOS...

MVC = Massive ViewController

Page 11: MVC na iOS - For-Mobile 2/2013

MVC na iOSnejčastěji v praxi:

MVC = Asynchronní načítání dat z internetu do UITableView

Page 12: MVC na iOS - For-Mobile 2/2013

MVC na iOSnejčastěji v praxi:

MVC = Asynchronní načítání dat z internetu do UITableView

Page 13: MVC na iOS - For-Mobile 2/2013

MVC na iOSnejčastěji v praxi:

MVC = Asynchronní načítání dat z internetu do UITableView pomocí bloků

Page 14: MVC na iOS - For-Mobile 2/2013

Byla jednou jedna tabulka...

load data

Page 15: MVC na iOS - For-Mobile 2/2013

Byla jednou jedna tabulka...

array

load data

Page 16: MVC na iOS - For-Mobile 2/2013

Byla jednou jedna tabulka...

array

load data

Page 17: MVC na iOS - For-Mobile 2/2013

Byla jednou jedna tabulka...

array

load data anim. update

Page 18: MVC na iOS - For-Mobile 2/2013

Byla jednou jedna tabulka...

array

cache

load data anim. update

Page 19: MVC na iOS - For-Mobile 2/2013

Byla jednou jedna tabulka...

array

cache

při update mažu cache...

load data anim. update

Page 20: MVC na iOS - For-Mobile 2/2013

Byla jednou jedna tabulka...

controller switch

array

cache

při update mažu cache...

load data anim. update

Page 21: MVC na iOS - For-Mobile 2/2013

Byla jednou jedna tabulka...

controller switch

load data anim. update

array

cache

Page 22: MVC na iOS - For-Mobile 2/2013

Byla jednou jedna tabulka...

controller switch

array

cache

load data anim. update

na pozadí

Page 23: MVC na iOS - For-Mobile 2/2013

Byla jednou jedna tabulka...

load data anim. update

update cache

loadcache

Page 24: MVC na iOS - For-Mobile 2/2013

Byla jednou jedna tabulka...

load data anim. update

V C M

Page 25: MVC na iOS - For-Mobile 2/2013

Byla jednou jedna tabulka...

load data anim. update

V C MUserItem

...

Page 26: MVC na iOS - For-Mobile 2/2013

A co API?

Page 27: MVC na iOS - For-Mobile 2/2013

A co API?

programátor

Page 28: MVC na iOS - For-Mobile 2/2013

A co API?

Page 29: MVC na iOS - For-Mobile 2/2013

A co API?

UITableView iOS API

Page 30: MVC na iOS - For-Mobile 2/2013

A co API?

Page 31: MVC na iOS - For-Mobile 2/2013

A co API?

???

Page 32: MVC na iOS - For-Mobile 2/2013

A co API?

MVC

+

c blocks

Page 33: MVC na iOS - For-Mobile 2/2013

Jak na MC?

view

controller

model

ownsload data

Page 34: MVC na iOS - For-Mobile 2/2013

Jak na MC?

view

controller

model

ownsload data

app delegate

refresh

vylez z metra

Page 35: MVC na iOS - For-Mobile 2/2013

Jak na MC?

view

controller

model

ownsload data

app delegate

na pozadí

Page 36: MVC na iOS - For-Mobile 2/2013

Jak na MC?

view

controller

model

ownsload data

iOS kill

zpět

Page 37: MVC na iOS - For-Mobile 2/2013

Jak na MC?

view

controller

model

ownsload data

iOS kill

zpět

???

Page 38: MVC na iOS - For-Mobile 2/2013

Jak na MC?

view

controller

model

ownsload data

app delegate

kill

zpět

model manager

proxymodel

Page 39: MVC na iOS - For-Mobile 2/2013

#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: ..."); } };}

Page 40: MVC na iOS - For-Mobile 2/2013

Next

Page 41: MVC na iOS - For-Mobile 2/2013

Next ?Onscreen vs. Offscreen rendering v iOS

KVC, KVO a Cocoa Bindings

Document Oriented Programing v Cocoa

Advanced Cora Data