рддреАрди20 рд╡рд┐рдзреНрд╡рдВрд╕рдХрд╛рд░реА: TTModel

рдЬрд┐рди рд▓реЛрдЧреЛрдВ рдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдХрд╛рд░рдг, рдЖрдИрдУрдПрд╕ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рддреАрди20 рд╕реЗ рдирд┐рдкрдЯрдирд╛ рдкрдбрд╝рд╛, рд╡реЗ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрдо рдпрд╛ рдЬреНрдпрд╛рджрд╛ рддреЗрдЬреА рд╕реЗ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреА рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╢реНрд░реЗрдгреА рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ, рд╡реИрд╢реНрд╡рд┐рдХ рд╡рд┐рдХрд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдПрдорд╡реАрд╕реА рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рджреГрд╖реНрдЯрд┐рдХреЛрдгред

рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдореБрдЦреНрдп рдиреБрдХрд╕рд╛рди рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рд▓реЗрдЦрди рдХрд╛ рдЕрднрд╛рд╡ рд╣реИ, рдФрд░ рдЬреЛ рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдЕрдВрджрд░ рд╣реЛ рд░рд╣рд╛ рд╣реИ, рдЙрд╕рдХреА рд╕рд╛рдорд╛рдиреНрдп рд╕рдордЭ рдХреЗ рд▓рд┐рдП рдЕрдкрд░реНрдпрд╛рдкреНрдд рд╣реИред

рдпрд╣ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдПрдХрдорд╛рддреНрд░ рдорд╛рдЗрдирд╕ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдЖрдк рддреАрди20 рдХреЗ рдкреЗрд╢реЗрд╡рд░реЛрдВ рдФрд░ рд╡рд┐рдкрдХреНрд╖реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрдИ рдЪрд░реНрдЪрд╛ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдпрд╣ рдХрд╣рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдореБрдЦреНрдп рдбреЗрд╡рд▓рдкрд░ рдиреЗ рддреАрди20 рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЛ рд░реЛрдХ рджрд┐рдпрд╛ , рдФрд░ рдПрдХ рдирдпрд╛ рдирд┐рдВрдмрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдмрдирд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдЬрд┐рд╕рдХрд╛ рдореБрдЦреНрдп рд╡рд┐рдЪрд╛рд░ рд╕рд╛рджрдЧреА рдФрд░ рдЙрдЪреНрдЪ рдкреНрд░рд▓реЗрдЦрди рд╣реЛрдЧрд╛:
"рдирд┐рдВрдмрд╕ рдПрдХ рдЖрдИрдУрдПрд╕ рдлреНрд░реЗрдорд╡рд░реНрдХ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдлреАрдЪрд░ рд╕реЗрдЯ рдЙрд╕рдХреЗ рдкреНрд░рд▓реЗрдЦрди рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╣реА рдмрдврд╝рддрд╛ рд╣реИред"

рдлрд┐рд░ рднреА, рдпрд╣ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЖрдЬ рддрдХ рдореМрдЬреВрдж рд╣реИ, рдФрд░ рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЗ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИрдВ, рдФрд░ рдбрд┐рдЬрд╛рдЗрди рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдХрд╛рдлреА рджрд┐рд▓рдЪрд╕реНрдк рд╣реИрдВред

рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ TTModel рдХреЗ рд╕рдВрдЪрд╛рд▓рди рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛рдПрдЧреА ред

рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рддреАрди20 рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рдпрд╣ рдПрдорд╡реАрд╕реА рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдореЙрдбрд▓ рдХреЗ рд╕рдВрднрд╛рд╡рд┐рдд рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рд╕реЗ рдПрдХ рдкрд░ рдирдЬрд╝рд░ рд░рдЦрдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред

рдореИрдВ рдЙрди рд╕рднреА рд╕реЗ рдкреВрдЫрддрд╛ рд╣реВрдВ рдЬреЛ рдЕрднреА рднреА рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ ред

TTModel



рдЬреЛ рд▓реЛрдЧ рдЕрднреА рднреА рдПрдорд╡реАрд╕реА (рдореЙрдбрд▓-рд╡реНрдпреВ-рдХрдВрдЯреНрд░реЛрд▓рд░) рдбрд┐рдЬрд╛рдЗрди рдкреИрдЯрд░реНрди рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реИрдВ, рдпрд╛ рдпрд╣ рднреВрд▓ рдЧрдП рд╣реИрдВ рдХрд┐ рдпрд╣ рд╕рдм рдХреНрдпрд╛ рд╣реИ, рдЗрд╕реЗ рд╡рд┐рдХреА рдкрд░ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред ( "рджреЛрд╣рд░рд╛рд╡ рд╕реАрдЦрдиреЗ рдХреА рдорд╛рдБ рд╣реИ," рдЖрдЦрд┐рд░)

рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░



рддреЛ, рддреАрди20 рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ TTModel MVC рдХрд╛ рдПрдХ рдХреНрд▓рд╛рд╕рд┐рдХ рдореЙрдбрд▓ рд╣реИред рдпрд╣реА рд╣реИ, рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдЕрдореВрд░реНрдд рдбреЗрдЯрд╛ рд╕реЗрдЯ рд╣реИ рдЬреЛ рджреГрд╢реНрдп рдпрд╛ рдирд┐рдпрдВрддреНрд░рдХ рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

TTModel рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рд╢реБрд░реВ рдореЗрдВ рдпрд╣ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рдореЙрдбрд▓ рд╡рд┐рднрд┐рдиреНрди рд░рд╛рдЬреНрдпреЛрдВ рдореЗрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, TTModel рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдмреБрдирд┐рдпрд╛рджреА рддрд░реАрдХреЗ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред


рдпрд╣ рд╡рд╛рд╕реНрддреБрд╢рд┐рд▓реНрдк рд╕рдорд╛рдзрд╛рди рдХрд╛рдлреА рдЙрдЪрд┐рдд рд╣реИ, рдФрд░ рдЖрдкрдХреЛ рдореЙрдбрд▓ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдЫрд┐рдкрд╛рдиреЗ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдорд╛рдпрдиреЗ рдирд╣реАрдВ рд░рдЦрддрд╛ рд╣реИ рдХрд┐ рдореЙрдбрд▓ рдХрд┐рд╕ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ - рдХреНрдпрд╛ рдЙрд╕реЗ рдирд╡реАрдирддрдо рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдПрдХ рдХреНрд╡реЗрд░реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд╕рд░реНрд╡рд░ рд╕реЗ рдЕрдиреБрд░реЛрдз, 10 рд▓рдЧрд╛рддрд╛рд░ рдкреНрд░рд╢реНрдиреЛрдВ рдкрд░ рдХреЙрд▓ рдпрд╛ рдХреБрдЫ рдЬрдЯрд┐рд▓ рдХрдореНрдкреНрдпреВрдЯреЗрд╢рдирд▓ рдХрд╛рд░реНрдп рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдПред рдЙрд╕рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реА рд╕реНрдерд┐рддрд┐ рдЬрд╛рдирдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдФрд░ рдЬреИрд╕реЗ рд╣реА рд░рд╛рдЬреНрдп рдмрджрд▓рдХрд░ isLoaded рд╣реЛ рдЧрдпрд╛ рд╣реИ, рд╣рдо рдЗрд╕ рдореЙрдбрд▓ рд╕реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдбреЗрдЯрд╛ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВред

//      DBRequestModel * someModel = [[DBRequestModel alloc] initWithQuery:@"SELECT * FROM TABLE USERS"]; //    [someModel load:TTURLRequestCachePolicyNone more:NO]; //    while ([someModel isLoading]) { [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]; } if ([someModel isLoaded]) { //    result DBRequestModel //   NSArray * users = [someModel result]; } else { //  ? } 

рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдХреЗрд╡рд▓ рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдореЙрдбрд▓ рдореЗрдВ рддреБрд░рдВрдд рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдбреЗрдЯрд╛ рдирд╣реАрдВ рд╣реИ

рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдХреБрдЫ рдмреНрд░рд╣реНрдорд╛рдВрдб рдореЗрдВ рдореМрдЬреВрдж рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕реЗ рд╣рдорд╛рд░реЗ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрд╢рдВрд╕рд╛ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред

рдЯреНрд░реИрдХрд┐рдВрдЧ рдореЙрдбрд▓ рд░рд╛рдЬреНрдп рдкрд░рд┐рд╡рд░реНрддрди


рд╣рдореЗрдВ рдореЙрдбрд▓ рдХреА рд╕реНрдерд┐рддрд┐ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ? рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдЗрд╕рдореЗрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдбреЗрдЯрд╛ рдХрдм рд╣реЛрдЧрд╛ред


рдореЙрдбрд▓ рдХреА рд╕реНрдерд┐рддрд┐ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдореЙрдбрд▓ рдХреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рд╕рд░рдгреА рдореЗрдВ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ (рдЖрдорддреМрд░ рдкрд░ рдирд┐рдпрдВрддреНрд░рдХ) рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

 [[someModel delegates] addObject:self]; 


рдмрджрд▓реЗ рдореЗрдВ, рдореЙрдбрд▓, рдЬрдм рдЕрдкрдирд╛ рд░рд╛рдЬреНрдп рдмрджрд▓ рд░рд╣рд╛ рд╣реИ, рддреЛ TTModelDelegate рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреЗ рд╕рднреА рдкреНрд░рддрд┐рдирд┐рдзрд┐рдпреЛрдВ рдХреЛ рдпрд╣ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░реЗрдЧрд╛

TTModelDelegate рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдЙрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬрд┐рдирд╕реЗ рдХрдИ рдмреБрдирд┐рдпрд╛рджреА рдЪреАрдЬреЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ:


рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░, рдореЙрдбрд▓ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдХрд░, рд╣рдо рдЙрди рддрд░реАрдХреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рдирдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рд╡рд┐рдзрд┐рдпрд╛рдВ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИрдВ, рдФрд░ рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдЙрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ рдЬрд┐рд╕рдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

 - (void)showModelDataIfPossible { //      self.model = [[DBRequestModel alloc] initWithQuery:@"SELECT * FROM TABLE USERS"]; //        [[[self model] delegates] addObject:self]; // ,     //        if (! [[self model] isLoaded] && [[self model] isOutdated]) { //    [someModel load:TTURLRequestCachePolicyNone more:NO]; } else { //   ,           //     [self showModelData:[self model]]; } } #pragma mark - TTModelDelegate - (void)modelDidStartLoad:(id<TTModel>)model { //   .. //       [self showLoading]; } - (void)modelDidFinishLoad:(id<TTModel>)model { //      [self hideLoading]; //    //      [self showModelData:[self model]]; } - (void)model:(id<TTModel>)model didFailLoadWithError:(NSError*)error { //      [self hideLoading]; //      User-Friendly  TTAlertNoTitle(@"Error code #10"); //   User-Friendly  [self showReloadScreen]; self.reloadLabel.title = @"Something went wrong" "But you could try to reload data"; } - (void)modelDidCancelLoad:(id<TTModel>)model { //      [self hideLoading]; //      , //       //  ,       //    } - (void)showModelData:(id<TTModel>)model { //    result DBRequestModel //   NSArray * users = [someModel result]; //    [self showUsers:users]; } 


рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдХрдо рдпрд╛ рдЬреНрдпрд╛рджрд╛ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЧрдпрд╛ рд╣реИ рдХрд┐ TTModel рдХреНрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рд╣реИред рдЕрдм рд╣рдо рдореЙрдбрд▓ рдХреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝реА рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВред

рдкреНрд░рддрд┐рдирд┐рдзрд┐рдпреЛрдВ рдмрдирд╛рдо рд╢реНрд░реЛрддрд╛рдУрдВ


TTModel рдореЗрдВ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рд╕рд░рдгреА рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╕рд░рдгреА рд╣реИ рдЬреЛ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЬреЛрдбрд╝реЗ рд░рдЦрдиреЗ рдкрд░ рдЙрдиреНрд╣реЗрдВ рдмрдирд╛рдП рдирд╣реАрдВ рд░рдЦрддреА рд╣реИред рдпрд╣ TTCreateNonRetainingArray рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдпрд╣ рдкрд░рд┐рдкрддреНрд░ рд╕рдВрджрд░реНрднреЛрдВ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕ рд╕рдореНрдореЗрд▓рди рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЛ рд╕реЗрд╡рд╛рдирд┐рд╡реГрддреНрдд рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП ред


рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд▓рд┐рдП рдирд╛рдо рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдирд╣реАрдВ рдЪреБрдирд╛ рдЧрдпрд╛ рд╣реИред рдЕрдкрдиреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдореЗрдВ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЛ рдореБрдЦреНрдп рдСрдмреНрдЬреЗрдХреНрдЯ (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореЙрдбрд▓) рдХреЛ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП, рдФрд░ рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ, рдкреНрд░рддрд┐рдирд┐рдзрд┐рдпреЛрдВ рдХрд╛ рд╕рд░рдгреА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╢реНрд░реЛрддрд╛рдУрдВ рдХрд╛ рдПрдХ рд╕рд░рдгреА рд╣реИред

рд╢реНрд░реЛрддрд╛ рдФрд░ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЗ рдмреАрдЪ рдореБрдЦреНрдп рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рд╢реНрд░реЛрддрд╛ рдХреЛ рдЖрдзрд╛рд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реВрдЪрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ , рдФрд░ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рдХреБрдЫ рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдЖрдзрд╛рд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдХрд╛рдордХрд╛рдЬ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред

рдЗрд╕рд▓рд┐рдП, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, TTModel рдореЗрдВ, рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдкреНрд░рддрд┐рдирд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рд╢реНрд░реЛрддрд╛рдУрдВ рдХрд╛ рдПрдХ рд╕рд░рдгреА рд╣реИред

TTURLRequestModel


рдиреЗрдЯрд╡рд░реНрдХ рд╕реЗ рдбреЗрдЯрд╛ рд▓реЗрдиреЗ рд╡рд╛рд▓реЗ рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдереНрд░реА 20 TTURLRequestModel рдХреНрд▓рд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдпрд╣ TTURLRequest рд╕реЗ рдмрдВрдзрд╛ рд╣реИ рдФрд░ рдЗрд╕ рддрдереНрдп рдХрд╛ рдПрдХ рд╕реНрдкрд╖реНрдЯ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдореЙрдбрд▓ рдХреЗ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдЫрд┐рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред

TTURLRequestModel рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдЕрдореВрд░реНрдд, рдПрдХ рд╡рд░реНрдЧ рд╣реИ, рдФрд░ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рд╣реИ, рдЬрдм рддрдХ рдХрд┐ рдпрд╣ рдиреЗрдЯрд╡рд░реНрдХ рдШрдЯрдХ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдореЙрдбрд▓ рдореЗрдВ рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рдлрд╝реАрд▓реНрдб рдирд╣реАрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИред

рд╕рд╛рдорд╛рдиреНрдп рджрд╕реНрддрд╛рд╡реЗрдЬ рдХреА рдХрдореА рдХреЗ рдХрд╛рд░рдг рдЗрд╕ рдореЙрдбрд▓ рдореЗрдВ рдЕрднреА рднреА рдХреНрдпрд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рдпрд╣ рддреБрд░рдВрдд рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХреИрд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдП :)

рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдореЙрдбрд▓ рдмрдирд╛рдПрдВ?



рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдПрдХ рдореЙрдбрд▓ рдХреЛ рд╣рдореЗрдВ рдХреБрдЫ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреА рд╕реВрдЪреА рдкреНрд░рджрд╛рди рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП, рд╣рдо рдЙрдиреНрд╣реЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╕рд░рд▓рддрд╛ рдХреЗ рд▓рд┐рдП рдХрд╣реЗрдВрдЧреЗред

рд╕рд░реНрд╡рд░ рдкреЗрдЬ рджреНрд╡рд╛рд░рд╛ рдбреЗрдЯрд╛ рдкреЗрдЬ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдкреГрд╖реНрда рдкрд░ рдПрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╣реИрдВред

рд░рд╛рд╕реНрддреЗ рдореЗрдВ!

рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░реЗрдВ

 @interface ItemsListModel : TTURLRequestModel { /*      */ NSMutableArray * _items; /*  URL  */ NSString * _baseURLString; /*   */ int _page; /*     */ int _itemsOnPage; } @property(nonatomic, readonly) NSMutableArray * users; @property(nonatomic, readonly) NSString * baseURLString; @property(nonatomic, assign) int page; @property(nonatomic, readonly) int itemsOnPage; /*   c  URL'      */ - (id)initWithBaseURLString:(NSString *)baseURLString itemsOnPage:(int)itemsOnPage; /* ,    TTURLRequest          */ - (TTURLRequest *)requestForDataWithCachePolicy:(TTURLRequestCachePolicy)cachePolicy more:(BOOL) more; /* ,   NSData * data          */ - (NSArray *)parseDataToItems:(NSData *)data error:(NSError **)error; @end 


рдФрд░, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдо рдЕрдкрдиреЗ рдореЙрдбрд▓ рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ

 @implementation ItemsListModel @synthesize items = _items; @synthesize itemsOnPage = _itemsOnPage; @synthesize baseURLString = _baseURLString; @synthesize page = _page; /*   .   .      0 */ - (id)initWithBaseURLString:(NSString *)baseURLString itemsOnPage:(int)itemsOnPage { self = [super init]; if (self) { _baseURLString = [baseURLString copy]; _itemsOnPage = itemsOnPage; _page = 0; _items = [[NSMutableArray array] retain]; _itemsOnPage = 20; } return self; } /*    */ - (void)load:(TTURLRequestCachePolicy)cachePolicy more:(BOOL)more { //  ,    ,  //     if ( ! [self isLoading]) { //    _isLoadingMore = more; //      //        if ( ! more) { [self reset]; } //        TT_RELEASE_SAFELY(_loadingRequest); _loadingRequest = [[self requestForDataWithCachePolicy:cachePolicy more:more] retain]; //    [_loadingRequest send]; } } /* ,        */ - (TTURLRequest *)requestForDataWithCachePolicy:(TTURLRequestCachePolicy)cachePolicy more:(BOOL) more { //     //      page // hhtp://baseURL/sdfsd?page=0 // //          //        NSString * fullRequestURL = self.baseURLString; fullRequestURL = [fullRequestURL stringByAddingQueryDictionary: [NSDictionary dictionaryWithObject: [NSString stringWithFormat:@"%d", _page] forKey:@"page" ] ]; //    TTURLRequest * req = [TTURLRequest requestWithURL:fullRequestURL delegate:self]; req.cachePolicy = cachePolicy; req.response = [[TTURLDataResponse new] autorelease]; return req; } /*  ,         */ - (NSArray *)parseDataToItems:(NSData *)data error:(NSError **)error { NSString * dataString = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease]; //      SBJSON NSArray * tweets = [dataString JSONValue]; return tweets; } - (void)requestDidFinishLoad:(TTURLRequest *)request { TTURLDataResponse * response = nil; // ,        if ([[request response] isKindOfClass:[TTURLDataResponse class]]) { response = (TTURLDataResponse *)request.response; } if ( ! response) { //   -    [self request:request didFailLoadWithError:nil/*    */]; _isLoadingMore = NO; return; } NSError * error = nil; //  ,    NSArray * loadedItems = [self parseDataToItems:[response data] error:&error]; // ,       if (error) { //  ?    [self request:request didFailLoadWithError:error]; return; } //    ,  //      if ([self isLoadingMore]) { [_items addObjectsFromArray:loadedItems]; } else { TT_RELEASE_SAFELY(_items); _items = [[NSMutableArray arrayWithArray:loadedItems] retain]; } //    _page++; if ([loadedItems count] < _itemsOnPage) { /* ,          ,     */ // _hasMoreItems = NO } _isLoadingMore = NO; [super requestDidFinishLoad:request]; } /*      */ - (void)reset { _page = 0; TT_RELEASE_SAFELY(_items); [super reset]; } /*      */ - (void)dealloc { TT_RELEASE_SAFELY(_baseURLString); TT_RELEASE_SAFELY(_items); [super dealloc]; } @end 


рдЦреИрд░, рдФрд░ рдЕрдВрдд рдореЗрдВ, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рд╣рдорд╛рд░реЗ рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ
 @implementation MyModelViewController #pragma mark - View LifeCycle - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [self createAndStartModelIfNeeded]; } //... #pragma mark - Model Showing - (void)showModelData:(id<TTModel>)model { //    result ItemsListModel //   NSArray * tweets = [(ItemsListModel *)model items]; //   " " NSLog(@"tweets : %{} ", tweets); //        :( //      @"tweets : %@" //    -  status Label if ([tweets count]) { NSDictionary * firstTweet = [tweets objectAtIndex:0]; NSString * tweetText = [firstTweet objectForKey:@"text"]; _statusLabel.text = [[_statusLabel text] stringByAppendingFormat:@"\n%@", tweetText]; } } #pragma mark - Model Creationg - (void)createAndStartModelIfNeeded { //   if ( ! _model) { _model = [[ItemsListModel alloc] initWithBaseURLString:@"http://api.twitter.com/1/statuses/user_timeline.json?user_id=18191307" itemsOnPage:20]; [[_model delegates] addObject:self]; } //       -    if ( ! [_model isLoaded] ) { [_model load:TTURLRequestCachePolicyNone more:NO]; } } #pragma mark - TTModel Delegate - (void)modelDidStartLoad:(id<TTModel>)model { _statusLabel.text = @""; } - (void)modelDidFinishLoad:(id<TTModel>)model { _statusLabel.text = @"!   "; [self showModelData:model]; } - (void)model:(id<TTModel>)model didFailLoadWithError:(NSError*)error { _statusLabel.text = [NSString stringWithFormat:@":(( %@", [error localizedDescription]]; } - (void)modelDidCancelLoad:(id<TTModel>)model { _statusLabel.text = @" "; } @end 


рдХреМрди рдкрд░рд╡рд╛рд╣ рдХрд░рддрд╛ рд╣реИ, рд╕реНрд░реЛрдд рдпрд╣рд╛рдВ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред рдореИрдВрдиреЗ рдереНрд░реАрдмреА рдХрдиреЗрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреА рдЦреБрд╢реА рд╕реЗ рд╣реИрдмрд░ рдпреВрдЬрд░реНрд╕ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреА рд╣рд┐рдореНрдордд рдирд╣реАрдВ рдХреА, рдЗрд╕рд▓рд┐рдП рдЖрд░реНрдХрд╛рдЗрд╡ рдореЗрдВ рд╕рд┐рд░реНрдл рдореЙрдбрд▓ рдФрд░ рд╡реНрдпреВрдХрдВрдЯреНрд░реЛрд▓рд░ рд╡рд╛рд▓реА рдлрд╛рдЗрд▓реЗрдВ рд╣реА рд╣реИрдВред

рд╕рд╛рд░рд╛рдВрд╢



рддреАрди20 рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ TTModel рдПрдХ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдЕрдореВрд░реНрдд рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ iOS рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд░рддреЗ рд╕рдордп MVC рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рдЖрдк рддреАрди20 рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рднреА, рдпрд╣ рдпреЛрдЧреНрдп рд╣реИ, рдлрд┐рд░ рднреА, TTModel рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдФрд░, рдпрджрд┐ рд╡рд╛рдВрдЫрд┐рдд рд╣реИ, рддреЛ рдЕрдкрдиреЗ рдореЙрдбрд▓ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдПред

Source: https://habr.com/ru/post/In134821/


All Articles