рдЧрд▓рддрд┐рдпреЛрдВ рдХрд╛ рдореЗрд░рд╛ рдЕрдиреБрднрд╡
рддреНрд░реБрдЯрд┐ рд╕реВрдЪреА
- рд╕рд░реНрд╡рд╡реНрдпрд╛рдкреА рд╡рд░реНрдЧ MCManager
- рд╕реНрдХреНрд░реАрди рдХреЗ рдмреАрдЪ рд╣рдорд╛рд░реЗ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░
- рдХрднреА рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╡рд┐рд░рд╛рд╕рдд рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ
- рд╣рдорд╛рд░реЗ рдЕрдкрдиреЗ рдЙрддреНрдкрд╛рджрди рдХреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдпрд╛ рд╕рд╛рдЗрдХрд┐рд▓ рдмрдирд╛рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдВ
- MVVM рдЖрддреНрдорд╛ MVP рдХреЗ рд╕рд╛рде
- рдиреЗрд╡рд┐рдЧреЗрд╢рди рдпрд╛ рд░рд╛рдЙрдЯрд░ рдФрд░ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдХреА рд╡рдХреНрд░рддрд╛ рдХреЗ рд╕рд╛рде рджреВрд╕рд░рд╛ рдкреНрд░рдпрд╛рд╕
- рд▓рдЧрд╛рддрд╛рд░ рдкреНрд░рдмрдВрдзрдХ
рдореЗрд░реЗ рд╕рд╣рд┐рдд рдХрдИ рд▓реЛрдЧ рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдХрд┐ рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рд╣рд╛рд▓рд╛рдд рдореЗрдВ рд╕рд╣реА рдХрд╛рдо рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдП, рдХреЛрдб рдХреЛ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХреИрд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛рдП, рд╡рд╛рд╕реНрддреБ рд╕рдорд╛рдзрд╛рди рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдП рдЖрджрд┐, рд▓реЗрдХрд┐рди рдореИрдВ рдЕрдкрдиреЗ рдЕрдиреБрднрд╡ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдирд┐рд╖реНрдХрд░реНрд╖ рдЬреЛ рдореИрдВ рдЙрд╕рдХреА рдЧрд▓рддрд┐рдпреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ред рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдпреЗ рдЙрди рд╕рднреА рдХреА рд╕рд╛рдорд╛рдиреНрдп рдЧрд▓рддрд┐рдпрд╛рдБ рд╣реЛрдВрдЧреА рдЬреЛ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рдкрде рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рддреЗ рд╣реИрдВ, рдпрд╛ рд╢рд╛рдпрдж рдХреБрдЫ рдирдпрд╛ рд╣реЛрдЧрд╛ред рдореИрдВ рд╕рд┐рд░реНрдл рдЕрдкрдирд╛ рдЕрдиреБрднрд╡ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдФрд░ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдХреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдкрдврд╝рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред
рд╕рд░реНрд╡рд╡реНрдпрд╛рдкреА рд╡рд░реНрдЧ MCManager
рдЖрдИрдЯреА рдореЗрдВ рдХрд╛рдо рдХреЗ рдкрд╣рд▓реЗ рд╡рд░реНрд╖, рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЖрдИрдУрдПрд╕ рд╡рд┐рдХрд╛рд╕ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рдореИрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рд╡рд╛рд╕реНрддреБрдХрд╛рд░ рдерд╛ рдФрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рддреИрдпрд╛рд░ рдерд╛ред рдлрд┐рд░ рднреА, рдореИрдВ рд╕рд╣рдЬрддрд╛ рд╕реЗ рд╕рдордЭ рдЧрдпрд╛ рдХрд┐ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдХреЛ рдкреНрд░рд╕реНрддреБрддрд┐ рдкрд░рдд рд╕реЗ рдЕрд▓рдЧ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИ, рдореЗрд░реЗ рд╡рд┐рдЪрд╛рд░ рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛ рд╕реЗ рдмрд╣реБрдд рджреВрд░ рдереАред
рдореИрдВ рдХрд╛рдо рдХреА рдПрдХ рдирдИ рдЬрдЧрд╣ рдкрд░ рдЪрд▓рд╛ рдЧрдпрд╛, рдЬрд╣рд╛рдБ рдореБрдЭреЗ рдПрдХ рдореМрдЬреВрджрд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдИ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХрд╛рдо рд╕реМрдВрдкрд╛ рдЧрдпрд╛ рдерд╛ред рдпрд╣ рдЗрдВрд╕реНрдЯрд╛рдЧреНрд░рд╛рдо рдкрд░ рд╡реАрдбрд┐рдпреЛ рд░рд┐рдХреЙрд░реНрдб рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдПрдирд╛рд▓реЙрдЧ рдерд╛, рдЬрд╣рд╛рдВ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдХреА рдЬрд╛рддреА рд╣реИ, рдЬрдмрдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмрдЯрди рдкрд░ рдЕрдкрдиреА рдЙрдВрдЧрд▓реА рд░рдЦрддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рд╡реАрдбрд┐рдпреЛ рдХреЗ рдХрдИ рдЯреБрдХрдбрд╝реЗ рдПрдХ рд╕рд╛рде рдЬреБрдбрд╝реЗ рд╣реЛрддреЗ рд╣реИрдВред рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдПрдХ рдЕрд▓рдЧ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдпрд╛ рдирдореВрдирд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдмрдирд╛рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдпрд╣, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ, рдореЗрд░реА рд╡рд╛рд╕реНрддреБ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕реНрд░реЛрдд рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдПрдХ рд╡рд░реНрд╖ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рддрдХ рдЪрд▓рд╛ред
рднрд╡рд┐рд╖реНрдп рдореЗрдВ, рдпрд╣ рдирдореВрдирд╛ рд╡реАрдбрд┐рдпреЛ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдФрд░ рд╕рдВрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдПрдХ рдкреВрд░реНрдг рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ рд╡рд┐рдХрд╕рд┐рдд рд╣реБрдЖред рдпрд╣ рд╣рд╛рд╕реНрдпрд╛рд╕реНрдкрдж рд╣реИ рдХрд┐ рд╢реБрд░реВ рдореЗрдВ рдирдореВрдиреЗ рдХрд╛ рдПрдХ рдирд╛рдо рдерд╛, рдЬрд┐рд╕рдХреЗ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдирд╛рдо рд╕реЗ рдПрдорд╕реА рдЙрдкрд╕рд░реНрдЧ рдПрдХрддреНрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐ рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдЬрд▓реНрдж рд╣реА рдирд╛рдо рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЙрджреНрджреЗрд╢реНрдп-рд╕реА, рдПрдорд╕реА рдореЗрдВ рдирд╛рдо рд╕рдореНрдореЗрд▓рди рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХ рдЙрдкрд╕рд░реНрдЧред рдЗрд╕рд▓рд┐рдП рд╕рд░реНрд╡рд╢рдХреНрддрд┐рдорд╛рди MCManager рд╡рд░реНрдЧ рдХрд╛ рдЬрдиреНрдо рд╣реБрдЖред

рдЪреВрдВрдХрд┐ рдпрд╣ рдПрдХ рдирдореВрдирд╛ рдерд╛ рдФрд░ рдкрд╣рд▓реА рдмрд╛рд░ рдореЗрдВ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╕рд░рд▓ рдереА, рдореИрдВрдиреЗ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рдПрдХ рдкреНрд░рдмрдВрдзрдХ рд╡рд░реНрдЧ рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧрд╛ред рдХрд╛рд░реНрдпрд╢реАрд▓рддрд╛, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдкреНрд░рд╛рд░рдВрдн / рд╕реНрдЯреЙрдк рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╡реАрдбрд┐рдпреЛ рдЯреБрдХрдбрд╝рд╛ рд░рд┐рдХреЙрд░реНрдб рдХрд░рдирд╛ рдФрд░ рдЗрди рдЯреБрдХрдбрд╝реЛрдВ рдХреЛ рдПрдХ рдкреВрд░реЗ рд╡реАрдбрд┐рдпреЛ рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИред рдФрд░ рдЙрд╕реА рдХреНрд╖рдг рдореИрдВ рдЕрдкрдиреА рдкрд╣рд▓реА рдЧрд▓рддреА рдХреЛ рдирд╛рдо рджреЗ рд╕рдХрддрд╛ рд╣реВрдВ - MCManager рд╡рд░реНрдЧ рдХрд╛ рдирд╛рдоред MCManager, рдХрд╛рд░реНрд▓! рдПрдХ рд╡рд░реНрдЧ рдХрд╛ рдирд╛рдо рдЕрдиреНрдп рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдЗрд╕рдХреЗ рдЙрджреНрджреЗрд╢реНрдп, рдЗрд╕рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдФрд░ рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рдХрд╣рдирд╛ рдЪрд╛рд╣рд┐рдП? рдареАрдХ рд╣реИ, рдмрд┐рд▓реНрдХреБрд▓ рдХреБрдЫ рднреА рдирд╣реАрдВ! рдФрд░ рдпрд╣ рдкрд░рд┐рд╢рд┐рд╖реНрдЯ рдореЗрдВ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдирд╛рдо рдореЗрдВ M рдФрд░, рдЙрд╕рдХреА рдорд╛рдБ, C. рдЕрдХреНрд╖рд░ рднреА рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рдореЗрд░реА рдореБрдЦреНрдп рдЧрд▓рддреА рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡рд░реНрдЧ рдирд╛рдо рдХреЗ рд╕рд╛рде рд╡рд░реНрдЧ рдиреЗ рд╕рдм рдХреБрдЫ рдХрд┐рдпрд╛, рд╢рдмреНрдж рд╕реЗ рд╕рдм рдХреБрдЫ рдмрд┐рд▓реНрдХреБрд▓ рд╕рдм рдХреБрдЫ рд╣реИ, рдЬреЛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЧрд▓рддреА рдереАред
рд╡реАрдбрд┐рдпреЛ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдПрдХ рдЫреЛрдЯреА рд╕реЗрд╡рд╛ рд╣реИ, рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд╡реАрдбрд┐рдпреЛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рднрдВрдбрд╛рд░рдг рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рдирд╛ рдПрдХ рдореЗрдВ рдХрдИ рд╡реАрдбрд┐рдпреЛ рдХреЗ рд╕рдВрдпреЛрдЬрди рдХреЗ рд▓рд┐рдП рджреВрд╕рд░реА рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реЗрд╡рд╛ рд╣реИред рдЗрди рддреАрди рд╕реНрд╡рддрдВрддреНрд░ рд╕реЗрд╡рд╛рдУрдВ рдХрд╛ рдХрд╛рдо, рдПрдХ рдкреНрд░рдмрдВрдзрдХ рдореЗрдВ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ред рд╡реНрдпрд╛рдкрд╛рд░ рдХреЗ рддрд░реНрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрдирд╛рдиреЗ рдФрд░ рд╡рд┐рднрд┐рдиреНрди рдШрдЯрдХреЛрдВ рдХреА рдмрд╛рддрдЪреАрдд рдкрд░ рд╕рднреА рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╡рд┐рд╡рд░рдгреЛрдВ рдХреЛ рдЫрд┐рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдореБрдЦреМрдЯрд╛ рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдорд╣рд╛рди рдерд╛ред рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЪрд░рдгреЛрдВ рдореЗрдВ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдореБрдЦреМрдЯрд╛ рд╡рд░реНрдЧ рдХреЗ рдирд╛рдо рдиреЗ рдХреЛрдИ рд╕рдВрджреЗрд╣ рдирд╣реАрдВ рдЙрдард╛рдпрд╛, рдЦрд╛рд╕рдХрд░ рдирдореВрдиреЗ рдореЗрдВред
рд▓реЗрдХрд┐рди рдЧреНрд░рд╛рд╣рдХ рдХреЛ рдбреЗрдореЛ рдкрд╕рдВрдж рдЖрдпрд╛ рдФрд░ рдЬрд▓реНрдж рд╣реА рдирдореВрдирд╛ рдПрдХ рдкреВрд░реНрдг рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ рдмрджрд▓ рдЧрдпрд╛ред рдЖрдк рдпрд╣ рдЙрдЪрд┐рдд рдард╣рд░рд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд░рд┐рдлреИрдХреНрдЯрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╕рдордп рдирд╣реАрдВ рдерд╛, рдХрд┐ рдЧреНрд░рд╛рд╣рдХ рдХрд╛рд░реНрдп рдХреЛрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ, рдЙрд╕ рд╕рдордп рдореИрдВрдиреЗ рдЦреБрдж рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ рдореИрдВрдиреЗ рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рд░рдЦреА рдереАред рд╕рд╣реА рдорд╛рдпрдиреЗ рдореЗрдВ, рд╡реНрдпрд╛рдкрд╛рд░ рддрд░реНрдХ рдФрд░ рдкреНрд░рд╕реНрддреБрддрд┐ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдПрдХ рд╕рдлрд▓рддрд╛ рдереАред рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рд╕рд┐рдВрдЧрд▓рдЯрди рдПрдорд╕реАрдореИрдирдЧрд░ рдХрд╛ рдПрдХ рд╡рд░реНрдЧ рдерд╛, рдЬреЛ рдПрдХ рджрд░реНрдЬрди рд╕реЗрд╡рд╛рдУрдВ рдФрд░ рдЕрдиреНрдп рдкреНрд░рдмрдВрдзрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдореБрдЦреМрдЯрд╛ рдерд╛ред рд╣рд╛рдВ, рдпрд╣ рдПрдХ рд╕рд┐рдВрдЧрд▓рдЯрди рднреА рдерд╛, рдЬреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕рднреА рдХреЛрдиреЛрдВ рд╕реЗ рдЙрдкрд▓рдмреНрдз рдерд╛ред
рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреВрд░реА рдЖрдкрджрд╛ рдХреЗ рдкреИрдорд╛рдиреЗ рдХреЛ рд╕рдордЭ рд╕рдХрддрд╛ рд╣реИред рдХреЛрдб рдХреА рдХрдИ рд╣рдЬрд╛рд░ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд░реНрдЧ рдЬреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдард┐рди рд╣реИ рдФрд░ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрдард┐рди рд╣реИред рдореИрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд┐рд╕реА рдЕрдиреНрдп рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪреБрдк рд╣реВрдВ, рдЬреЛ рдореЛрдмрд╛рдЗрд▓ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдХрд╛рдлреА рдЖрдо рд╣реИред
рдХреБрдЫ рд╕рдордп рдмрд╛рдж рдореИрдВрдиреЗ рдЕрдкрдиреЗ рд▓рд┐рдП рдЬреЛ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓реЗ рд╣реИрдВ, рд╡реЗ рдЕрд╕реНрдкрд╖реНрдЯ рдирд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдХрдХреНрд╖рд╛рдПрдВ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реИрдВред рдореИрдВрдиреЗ рдорд╣рд╕реВрд╕ рдХрд┐рдпрд╛ рдХрд┐ рддрд░реНрдХ рдХреЛ рдЯреБрдХрдбрд╝реЛрдВ рдореЗрдВ рддреЛрдбрд╝рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдФрд░ рд╣рд░ рдЪреАрдЬ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдирд╣реАрдВ рдмрдирд╛рдиреЗ рдХреАред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдерд╛ рдХрд┐ рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЖрдк рдПрд╕рдУрдПрд▓рдЖрдИрдбреА рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ, рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЕрд▓рдЧрд╛рд╡ рд╕рд┐рджреНрдзрд╛рдВрдд рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдкрд╛рд▓рди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред
рд╕реНрдХреНрд░реАрди рдХреЗ рдмреАрдЪ рд╣рдорд╛рд░реЗ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░
рддрд░реНрдХ рдФрд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдкреГрдердХреНрдХрд░рдг рдПрдХрдорд╛рддреНрд░ рдореБрджреНрджрд╛ рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕рдиреЗ рдореБрдЭреЗ рдЙрдкрд░реЛрдХреНрдд рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд┐рдд рдХрд┐рдпрд╛ рд╣реИред рдореИрдВ рдпрд╣ рдирд╣реАрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдЙрд╕ рд╕рдордп рдореИрдВ рд╕реНрдХреНрд░реАрди рдХреЛрдб рдФрд░ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдХреЛрдб рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рдерд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдореИрдВ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рдмрд╛рдЗрдХ рдХреЗ рд╕рд╛рде рдЖрдпрд╛ рдерд╛ред

рдирдореВрдиреЗ рдореЗрдВ рдХреЗрд╡рд▓ рддреАрди рд╕реНрдХреНрд░реАрди рдереЗ: рд░рд┐рдХреЙрд░реНрдб рдХрд┐рдП рдЧрдП рд╡реАрдбрд┐рдпреЛ рдХреА рдПрдХ рддрд╛рд▓рд┐рдХрд╛, рдПрдХ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рд╕реНрдХреНрд░реАрди рдФрд░ рдкреЛрд╕реНрдЯ-рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рд╕реНрдХреНрд░реАрди рдХреЗ рд╕рд╛рде рдПрдХ рдореЗрдиреВред рдиреЗрд╡рд┐рдЧреЗрд╢рди рд╕реНрдЯреИрдХ рдореЗрдВ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд╡реНрдпреВ рдХреЙрдиреНрдЯреНрд░реЛрд▓рд░реНрд╕ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИрдВ, рдЗрд╕рдХреА рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ UINavigationController рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдореИрдВрдиреЗ RootViewcontroller рдХреЛ рдЬреЛрдбрд╝рд╛, рдЪреМрдХрд╕ рдкрд╛рдардХреЛрдВ рдиреЗ рдкрд╣рд▓реЗ рд╣реА рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдпрд╛ рд╣реИ рдХрд┐ рдпрд╣ MCRootViewController рдерд╛, рдЬреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рдореБрдЦреНрдп рдПрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЙрд╕реА рд╕рдордп, рд░реВрдЯ рдирд┐рдпрдВрддреНрд░рдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реНрдХреНрд░реАрди рдореЗрдВ рд╕реЗ рдПрдХ рдирд╣реАрдВ рдерд╛, рдпрд╣ рд╕рд┐рд░реНрдл рд╡рд╛рдВрдЫрд┐рдд UIViewController рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИред рдЬреИрд╕реЗ рдХрд┐ рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рдерд╛, рдЗрд╕рд▓рд┐рдП рд░реВрдЯ рдирд┐рдпрдВрддреНрд░рдХ рднреА рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд┐рдП рдЧрдП рд╕рднреА рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдХрд╛ рдПрдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдерд╛ред рдирддреАрдЬрддрди, рд╕рдордп рдкрд░ рдкреНрд░рддреНрдпреЗрдХ рдХреНрд╖рдг рдореЗрдВ рдкрджрд╛рдиреБрдХреНрд░рдо рдореЗрдВ рдХреЗрд╡рд▓ рджреЛ рд╡реАрд╕реА рдереЗ, рдФрд░ рд╕рднреА рдиреЗрд╡рд┐рдЧреЗрд╢рди рдХреЛ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдпрд╣ рдХреИрд╕реЗ рджрд┐рдЦрддрд╛ рд╣реИ: рдкреНрд░рддреНрдпреЗрдХ рд╕реНрдХреНрд░реАрди рдХрд╛ рдЕрдкрдирд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдерд╛, рдЬрд╣рд╛рдВ рдиреЗрд╡рд┐рдЧреЗрд╢рди рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рд░реВрдЯ рдирд┐рдпрдВрддреНрд░рдХ рдиреЗ рдЗрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдФрд░ рд╕реНрдХреНрд░реАрди рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ред RootViewController рд╡рд░реНрддрдорд╛рди рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ рднрдВрдЧ рдХрд░рддрд╛ рд╣реИ, рдПрдХ рдирдпрд╛ рдмрдирд╛рдпрд╛ рдФрд░ рдЗрд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛, рдЬрдмрдХрд┐ рдПрдХ рд╕реНрдХреНрд░реАрди рд╕реЗ рджреВрд╕рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рдерд╛ред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рд╡реНрдпрд╛рдкрд╛рд░ рддрд░реНрдХ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреЗ рд╕рд┐рдВрдЧрд▓рдЯрди рд╡рд░реНрдЧ рдореЗрдВ рдерд╛, рдЗрд╕рд▓рд┐рдП рд╕реНрдХреНрд░реАрди рдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдХреБрдЫ рднреА рд╕рдВрдЧреНрд░рд╣реАрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдФрд░ рджрд░реНрдж рд░рд╣рд┐рдд рд░реВрдк рд╕реЗ рдирд╖реНрдЯ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдлрд┐рд░ рд╕реЗ, рдПрдХ рдЕрдЪреНрдЫреЗ рдЗрд░рд╛рджреЗ рдХрд╛ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЕрд╣рд╕рд╛рд╕ рджреЛрдиреЛрдВ рдкреИрд░реЛрдВ рдкрд░ рдЧрд┐рд░ рдЧрдпрд╛, рдФрд░ рдХрднреА-рдХрднреА рд▓рдбрд╝рдЦрдбрд╝рд╛ рдЧрдпрд╛ред
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрдЧрд░ рдЖрдкрдХреЛ рд╡реАрдбрд┐рдпреЛ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рд╕реНрдХреНрд░реАрди рд╕реЗ рд╡рд╛рдкрд╕ рдореБрдЦреНрдп рдореЗрдиреВ рдореЗрдВ рдЬрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рд╡рд┐рдзрд┐ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛:
- (void)cancel;
рдпрд╛ рдРрд╕рд╛ рдХреБрдЫ, рдФрд░ рд░реВрдЯ рдирд┐рдпрдВрддреНрд░рдХ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рднреА рдЧрдВрджреЗ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред
рдЕрдВрдд рдореЗрдВ, MCRootViewController, MCManager рдХрд╛ рдПрдХ рдПрдирд╛рд▓реЙрдЧ рдмрди рдЧрдпрд╛, рд▓реЗрдХрд┐рди рд╕реНрдХреНрд░реАрди рдХреЗ рдмреАрдЪ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдореЗрдВ, рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреА рд╡реГрджреНрдзрд┐ рдФрд░ рдирдИ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдирдИ рд╕реНрдХреНрд░реАрди рдХреЛ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ред
рд╕рд╛рдЗрдХрд┐рд▓ рдХрд╛рд░рдЦрд╛рдиреЗ рдиреЗ рдЕрдердХ рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛, рдФрд░ рдореИрдВрдиреЗ рдореЛрдмрд╛рдЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдкрд░ рд▓реЗрдЦреЛрдВ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрд╛ред рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рд╕реНрдХреНрд░реАрди рд╕реЗ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдХрднреА рдирд╣реАрдВ рдЫреЛрдбрд╝рд╛ред
рд▓рд╛рдн рдпрд╣ рдерд╛ рдХрд┐ рд╕реНрдХреНрд░реАрди рд╕реНрд╡рддрдВрддреНрд░ рдереЗ рдФрд░ рдЙрдирдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдЯреАрдХ рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рдиреБрдХрд╕рд╛рди рдореЗрдВ рдРрд╕реА рдХрдХреНрд╖рд╛рдПрдВ рдмрдирд╛рдП рд░рдЦрдиреЗ рдореЗрдВ рдХрдард┐рдирд╛рдИ рд╢рд╛рдорд┐рд▓ рд╣реИред рдЬрдм рдЖрдк рдкрд╣рд▓реЗ рдЪреБрдиреЗ рдЧрдП рд╕реНрдХреНрд░реАрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдХреНрд░реЙрд▓ рдХрд░рдХреЗ рд╡рд╛рдкрд╕ рд▓реМрдЯрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рддреЛ рд╕реНрдХреНрд░реАрди рдХреЗ рдвреЗрд░ рдХреА рдХрдореА рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ред рд╕реНрдХреНрд░реАрди рдХреЗ рдмреАрдЪ рд╕рдВрдХреНрд░рдордг рдХрд╛ рдЬрдЯрд┐рд▓ рддрд░реНрдХ, рд░реВрдЯ рдХрдВрдЯреНрд░реЛрд▓рд░ рдиреЗ рдирдИ рд╕реНрдХреНрд░реАрди рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдХреЗ рдкреНрд░рднрд╛рд╡рд┐рдд рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд┐рдпрд╛ред
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЖрдкрдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд╕рднреА рдиреЗрд╡рд┐рдЧреЗрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдореЗрд░реЗ MCRootViewController рдиреЗ рдУрдкрди-рдХреНрд▓реЛрдЬреНрдб рд╕рд┐рджреНрдзрд╛рдВрдд рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд┐рдпрд╛ рд╣реИред рдЗрд╕рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдирд╛ рд▓рдЧрднрдЧ рдЕрд╕рдВрднрд╡ рд╣реИ, рдФрд░ рд╕рднреА рдкрд░рд┐рд╡рд░реНрддрди рд▓рдЧрд╛рддрд╛рд░ рдХрдХреНрд╖рд╛ рдореЗрдВ рд╣реА рдХрд┐рдП рдЬрд╛рдиреЗ рдЪрд╛рд╣рд┐рдПред
рдореИрдВрдиреЗ рдПрдХ рдореЛрдмрд╛рдЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд╕реНрдХреНрд░реАрди рдХреЗ рдмреАрдЪ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдкрдврд╝рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛, рд░рд╛рдЙрдЯрд░ рдФрд░ рдХреЛрдСрд░реНрдбрд┐рдиреЗрдЯрд░ рдЬреИрд╕реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реБрдЖред рдореИрдВ рд░рд╛рдЙрдЯрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рдж рд▓рд┐рдЦреВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╣реИред
рдХрднреА рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╡рд┐рд░рд╛рд╕рдд рдирд╣реАрдВ рд╣реИ
рдореИрдВ рди рдХреЗрд╡рд▓ рдЕрдкрдиреЗ рдореЛрддреА, рдмрд▓реНрдХрд┐ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдХреЗ рдордЬрд╝реЗрджрд╛рд░ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдФрд░ рд╕рдорд╛рдзрд╛рди рднреА рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬрд┐рдирд╕реЗ рдореБрдЭреЗ рдирд┐рдкрдЯрдирд╛ рдерд╛ред рдЙрд╕реА рд╕реНрдерд╛рди рдкрд░ рдЬрд╣рд╛рдВ рдореИрдВрдиреЗ рдЕрдкрдиреА рдЙрддреНрдХреГрд╖реНрдЯ рдХреГрддрд┐рдпреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд┐рдпрд╛, рдЙрдиреНрд╣реЛрдВрдиреЗ рдореБрдЭреЗ рдПрдХ рд╕рд░рд▓ рдХрд╛рд░реНрдп рд╕реМрдВрдкрд╛ред рдпрд╣ рдХрд╛рд░реНрдп рдПрдХ рдЕрдиреНрдп рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ рдореЗрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдПрдХ рд╕реНрдХреНрд░реАрди рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдерд╛ред рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ рдкреАрдПрдо рдХреЗ рд╕рд╛рде рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛, рдЙрдерд▓реЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдФрд░ рдереЛрдбрд╝реЗ рд╡рд┐рдЪрд╛рд░ рдХреЗ рдмрд╛рдж, рдпрд╣ рджреЛ рдпрд╛ рддреАрди рдШрдВрдЯреЗ рдФрд░ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рдХреНрдпрд╛ рдЧрд▓рдд рд╣реИ, рдЖрдкрдХреЛ рдмрд╕ рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рдПрдХ рддреИрдпрд╛рд░ рд╕реНрдХреНрд░реАрди рдХреНрд▓рд╛рд╕ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред рджрд░рдЕрд╕рд▓, рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд╕рдм рдХреБрдЫ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╣рдореЗрдВ ctrl + c рдФрд░ ctrl + v рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣рд╛рдБ рд╕рд┐рд░реНрдл рдПрдХ рдЫреЛрдЯреА рд╕реА рдмрд╛рд░реАрдХрд┐рдпрд╛рдБ рд╣реИрдВ, рдЗрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд▓рд┐рдЦрдиреЗ рд╡рд╛рд▓реЗ рдбреЗрд╡рд▓рдкрд░ рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд┐рд░рд╛рд╕рдд рд╕реЗ рдкреНрдпрд╛рд░ рдерд╛ред

рдореБрдЭреЗ рдЬрд▓реНрджреА рд╕реЗ рдореЗрд░реА рдЬрд░реВрд░рдд рдХреЗ рд╣рд┐рд╕рд╛рдм рд╕реЗ ViewController рдорд┐рд▓реА, рдореИрдВ рднрд╛рдЧреНрдпрд╢рд╛рд▓реА рдерд╛ рдХрд┐ рддрд░реНрдХ рдФрд░ рдкреНрд░рд╕реНрддреБрддрд┐ рдХрд╛ рдХреЛрдИ рдЕрд▓рдЧрд╛рд╡ рдирд╣реАрдВ рдерд╛ред рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рдкреБрд░рд╛рдирд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдерд╛, рдЬрдм рдирд┐рдпрдВрддреНрд░рдХ рдореЗрдВ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдХреЛрдб рд╣реЛрддреЗ рдереЗред рдореИрдВрдиреЗ рдЗрд╕реЗ рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдХреЙрдкреА рдХрд┐рдпрд╛ рдФрд░ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдХрд┐ рдЗрд╕реЗ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рд╣реИред рдФрд░ рдкрд╣рд▓реА рдЪреАрдЬ рдЬреЛ рдореБрдЭреЗ рдкрддрд╛ рдЪрд▓реА рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдЬрд┐рд╕ рдирд┐рдпрдВрддреНрд░рдХ рдХреА рдореБрдЭреЗ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рд╡рд╣ рджреВрд╕рд░реЗ рдирд┐рдпрдВрддреНрд░рдХ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ред рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдмрд╛рдд, рдХрд╛рдлреА рдЕрдкреЗрдХреНрд╖рд┐рдд рдШрдЯрдирд╛ред рдЪреВрдБрдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдЬреНрдпрд╛рджрд╛ рд╕рдордп рдирд╣реАрдВ рдерд╛, рдореБрдЭреЗ рд╕рд┐рд░реНрдл рдЕрдкрдиреА рдЬрд░реВрд░рдд рдХреА рдХрдХреНрд╖рд╛ рдорд┐рд▓реА рдФрд░ рдЗрд╕реЗ рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЦреАрдВрдЪ рд▓рд┐рдпрд╛ред рдЦреИрд░ рдЕрдм рдпрд╣ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдореИрдВрдиреЗ рд╕реЛрдЪрд╛, рдФрд░ рдореИрдВ рдЗрддрдирд╛ рдЧрд▓рдд рдХрднреА рдирд╣реАрдВ рдерд╛!
рди рдХреЗрд╡рд▓ рдореБрдЭреЗ рдЬрд┐рд╕ рд╡рд░реНрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА, рдЙрд╕рдХреЗ рдкрд╛рд╕ рдХрд╕реНрдЯрдо рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рдХрдИ рдЪрд░ рдереЗ рдЬрд┐рдиреНрд╣реЗрдВ рдореЗрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдХреЙрдкреА рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА, рдЗрд╕рд▓рд┐рдП рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЛ рдХреБрдЫ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ред рдмрджрд▓реЗ рдореЗрдВ, рдмреЗрд╕ рдХрдХреНрд╖рд╛рдПрдВ рдпрд╛ рддреЛ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реАрдВ рдпрд╛ рдХрд╕реНрдЯрдо рдкреНрд░рдХрд╛рд░ рд╡рд╛рд▓реЗ рдлрд╝реАрд▓реНрдбреНрд╕ рдереЗ, рдЬреИрд╕рд╛ рдХрд┐ рдХрдИ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдХреБрдЫ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, NSObject, UIViewController рдпрд╛ UIView рдирд╣реАрдВ рдерд╛ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЕрдирд╛рд╡рд╢реНрдпрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдореЗрд░реЗ рдкрд╛рд╕ рдЪрд▓рд╛ рдЧрдпрд╛ред
рдЪреВрдВрдХрд┐ рдЗрд╕ рдХрд╛рд░реНрдп рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рдордп рдХреА рдЙрдореНрдореАрдж рдирд╣реАрдВ рдереА, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рддрд░реАрдХреЗ рдХреЛ рдирд╣реАрдВ рджреЗрдЦрд╛ рдХрд┐ рдХреИрд╕реЗ рдмрд╕ рдЖрд╡рд╢реНрдпрдХ рд╡рд░реНрдЧреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рд╣реИ рдЬреЛ рдХрд┐ xCode рдХреЛ рдмрд╕ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдмрд┐рдирд╛ рдХрд┐рд╕реА рджрд░реНрдж рдХреЗ рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдирддреАрдЬрддрди, рджреЛ рдпрд╛ рддреАрди рдШрдВрдЯреЗ рдереЛрдбрд╝реЗ рд╕реЗ рдЦреАрдВрдЪреЗ рдЬрд╛рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдВрдд рдореЗрдВ рдореБрдЭреЗ рд╡рд┐рд░рд╛рд╕рдд рдХреЗ рдкрджрд╛рдиреБрдХреНрд░рдо рдХреА рдкреВрд░реА рд╡реЗрдм рдореЗрдВ рддрдмреНрджреАрд▓ рдХрд░рдирд╛ рдкрдбрд╝рд╛, рдПрдХ рд╕рдЪреНрдЪреЗ рдореВрд░реНрддрд┐рдХрд╛рд░ рдХреА рддрд░рд╣, рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЛ рдХрд╛рдЯрдХрд░ред
рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдореИрдВ рдЗрд╕ рдирд┐рд╖реНрдХрд░реНрд╖ рдкрд░ рдкрд╣реБрдВрдЪрд╛ рдХрд┐ рд╕рднреА рдЕрдЪреНрдЫреА рдЪреАрдЬреЗрдВ рдореЙрдбрд░реЗрд╢рди рдореЗрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╡рд┐рд░рд╛рд╕рдд рдХреЗ рд░реВрдк рдореЗрдВ рдРрд╕реА "рдЕрджреНрднреБрдд" рдЪреАрдЬред рдлрд┐рд░ рдореБрдЭреЗ рд╡рд┐рд░рд╛рд╕рдд рдХреЗ рдиреБрдХрд╕рд╛рди рд╕рдордЭ рдореЗрдВ рдЖрдиреЗ рд▓рдЧреЗред рдореИрдВрдиреЗ рдЕрдкрдиреЗ рд▓рд┐рдП рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓рд╛, рдЕрдЧрд░ рдореИрдВ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рдореЙрдбреНрдпреВрд▓ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рддреЛ рдореБрдЭреЗ рдЙрдиреНрд╣реЗрдВ рдФрд░ рдЕрдзрд┐рдХ рд╕реНрд╡рддрдВрддреНрд░ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рд╣рдорд╛рд░реЗ рдЕрдкрдиреЗ рдЙрддреНрдкрд╛рджрди рдХреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдпрд╛ рд╕рд╛рдЗрдХрд┐рд▓ рдмрдирд╛рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдВ
рдХрд╛рдо рдХреА рдПрдХ рдирдИ рдЬрдЧрд╣ рдкрд░ рдЬрд╛рдирд╛ рдФрд░ рдПрдХ рдирдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╢реБрд░реВ рдХрд░рдирд╛, рдореИрдВрдиреЗ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рдбрд┐рдЬрд╛рдЗрди рдореЗрдВ рд╕рднреА рдЙрдкрд▓рдмреНрдз рдЕрдиреБрднрд╡ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрд╛ рдФрд░ рдмрдирд╛рдирд╛ рдЬрд╛рд░реА рд░рдЦрд╛ред рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд┐рдП рдЧрдП рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЛ рдирдЬрд░рдЕрдВрджрд╛рдЬ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрд╛, рд▓реЗрдХрд┐рди рд╕рд╛рде рд╣реА рдореИрдВрдиреЗ рд▓рдЧрд╛рддрд╛рд░ "рдлреВрдЯ рдбрд╛рд▓реЛ рдФрд░ рдЬреАрддреЛ" рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдкрд╛рд▓рди рдХрд┐рдпрд╛ред
рд╕реНрд╡рд┐рдлреНрдЯ рдХреЗ рдЖрдЧрдорди рд╕реЗ рдкрд╣рд▓реЗ рдпрд╣ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдирд╣реАрдВ рдерд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдСрдмреНрдЬреЗрдХреНрдЯрд┐рд╡-рд╕реА рдХреА рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдкрд░ рдзреНрдпрд╛рди рджрд┐рдпрд╛ред рдореИрдВрдиреЗ рднрд╛рд╖рд╛ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реА рдЗрдВрдЬреЗрдХреНрд╢рди рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред рдореИрдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╡рд┐рд╕реНрддрд╛рд░ рдЙрдкрдХрд░рдг рд╕реЗ рдкреНрд░реЗрд░рд┐рдд рдерд╛, рдореБрдЭреЗ рдЗрд╕рдХрд╛ рдирд╛рдо рднреА рдпрд╛рдж рдирд╣реАрдВ рд╣реИред
рд▓рдмреНрдмреЛрд▓реБрдЖрдм рдпрд╣ рд╣реИ: BaseViewController рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдореЗрдВ, рдореИрдВрдиреЗ рдПрдХ BaseViewModel рдХреНрд▓рд╛рд╕ рдлрд╝реАрд▓реНрдб рдЬреЛрдбрд╝рд╛ред рддрджрдиреБрд╕рд╛рд░, рдкреНрд░рддреНрдпреЗрдХ рд╕реНрдХреНрд░реАрди рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдирд┐рдпрдВрддреНрд░рдХ рдмрдирд╛рдпрд╛, рдЬреЛ рдХрд┐ рдмреБрдирд┐рдпрд╛рджреА рд▓реЛрдЧреЛрдВ рдХреЛ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛, рдФрд░ рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдЬреЛ рд╡реНрдпреВрдореЙрдбрд▓ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░ рд╕рдХреЗред рдлрд┐рд░ рдЬрд╛рджреВ рдЖрдпрд╛ред рдореИрдВрдиреЗ viewModel рдЧреБрдгреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдФрд░ рд╡рд╛рдВрдЫрд┐рдд рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рд╛ред рдмрджрд▓реЗ рдореЗрдВ, рдореИрдВрдиреЗ рдЗрд╕ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╕реНрдХреНрд░реАрди рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ ViewModel рд╡рд░реНрдЧ рдмрдирд╛рдпрд╛ред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, ViewDidLoad рд╡рд┐рдзрд┐ рдореЗрдВ BaseViewController рдореЗрдВ, рдореИрдВрдиреЗ рдореЙрдбрд▓ рдХреЗ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рдБрдЪ рдХреА, BaseViewModel рдХреЗ рд╕рднреА рд╡рдВрд╢рдЬреЛрдВ рдХреА рд╕реВрдЪреА рдХреА рдЬрд╛рдБрдЪ рдХреА, рдореБрдЭреЗ рд╡рд╣ рд╡рд░реНрдЧ рдорд┐рд▓рд╛ рдЬрд┐рд╕рдХреА рдореБрдЭреЗ рдЬрд╝рд░реВрд░рдд рдереА рдФрд░ рдЬрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рджреГрд╢реНрдпрдореЙрдбрд▓ рдХреА рдореБрдЭреЗ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред
рдореВрд▓ ViewController рдЙрджрд╛рд╣рд░рдг #import <UIKit/UIKit.h> // MVC model #import "BaseMVCModel.h" @class BaseViewController; @protocol BaseViewControllerDelegate <NSObject> @required - (void)backFromNextViewController:(BaseViewController *)aNextViewController withOptions:(NSDictionary *)anOptionsDictionary; @end @interface BaseViewController : UIViewController <BaseViewControllerDelegate> @property (nonatomic, weak) BaseMVCModel *model; @property (nonatomic, assign) id<BaseViewControllerDelegate> prevViewController; - (void)backWithOptions:(NSDictionary *)anOptionsDictionary; + (void)setupUIStyle; @end import "BaseViewController.h" // Helpers #import "RuntimeHelper.h" @interface BaseViewController () @end @implementation BaseViewController + (void)setupUIStyle { } #pragma mark - #pragma mark Life cycle - (void)viewDidLoad { [super viewDidLoad]; self.model = [BaseMVCModel getModel:FindPropertyProtocol(@"model", [self class])]; } #pragma mark - #pragma mark Navigation - (void)backWithOptions:(NSDictionary *)anOptionsDictionary { if (self.prevViewController) { [self.prevViewController performSelector:@selector(backFromNextViewController:withOptions:) withObject:self withObject:anOptionsDictionary]; } } #pragma mark - #pragma mark Seque - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { if ([segue.destinationViewController isKindOfClass:[BaseViewController class]] { ((BaseViewController *)segue.destinationViewController).prevViewController = self; } } #pragma mark - #pragma mark BaseViewControllerDelegate - (void)backFromNextViewController:(BaseViewController *)aNextViewController withOptions:(NSDictionary *)anOptionsDictionary { [self doesNotRecognizeSelector:_cmd]; } @end
рдореВрд▓ ViewModel рдЙрджрд╛рд╣рд░рдг #import <Foundation/Foundation.h> @interface BaseMVCModel : NSObject @property (nonatomic, assign) id delegate; + (id)getModel:(NSString *)someProtocol; @end #import "BaseMVCModel.h" // IoC #import "IoCContainer.h" @implementation BaseMVCModel + (id)getModel:(NSString *)someProtocol { return [[IoCContainer sharedIoCContainer] getModel:NSProtocolFromString(someProtocol)]; } @end
рд╕рд╣рд╛рдпрдХ рд╡рд░реНрдЧ #import <Foundation/Foundation.h> @interface IoCContainer : NSObject + (instancetype)sharedIoCContainer; - (id)getModel:(Protocol *)someProtocol; @end #import "IoCContainer.h" // Helpers #import "RuntimeHelper.h" // Models #import "BaseMVCModel.h" @interface IoCContainer () @property (nonatomic, strong) NSMutableSet *models; @end @implementation IoCContainer #pragma mark - #pragma mark Singleton + (instancetype)sharedIoCContainer { static IoCContainer *_sharedIoCContainer = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ _sharedIoCContainer = [IoCContainer new]; }); return _sharedIoCContainer; } - (id)getModel:(Protocol *)someProtocol { if (!someProtocol) { return [BaseMVCModel new]; } NSArray *modelClasses = ClassGetSubclasses([BaseMVCModel class]); __block Class currentClass = NULL; [modelClasses enumerateObjectsUsingBlock:^(Class class, NSUInteger idx, BOOL *stop) { if ([class conformsToProtocol:someProtocol]) { currentClass = class; } }]; if (currentClass == nil) { return [BaseMVCModel new]; } __block BaseMVCModel *currentModel = nil; [self.models enumerateObjectsUsingBlock:^(id model, BOOL *stop) { if ([model isKindOfClass:currentClass]) { currentModel = model; } }]; if (!currentModel) { currentModel = [currentClass new]; [self.models addObject:currentModel]; } return currentModel; } - (NSMutableSet *)models { if (!_models) { _models = [NSMutableSet set]; } return _models; } @end #import <Foundation/Foundation.h> NSString * FindPropertyProtocol(NSString *propertyName, Class class); NSArray * ClassGetSubclasses(Class parentClass); #import "RuntimeHelper.h" #import <objc/runtime.h> #pragma mark - #pragma mark Functions NSString * FindPropertyProtocol(NSString *aPropertyName, Class class) { unsigned int propertyCount; objc_property_t *properties = class_copyPropertyList(class, &propertyCount); for (unsigned int i = 0; i < propertyCount; i++) { objc_property_t property = properties[i]; const char *propertyName = property_getName(property); if ([@(propertyName) isEqualToString:aPropertyName]) { const char *attrs = property_getAttributes(property); NSString* propertyAttributes = @(attrs); NSScanner *scanner = [NSScanner scannerWithString: propertyAttributes]; [scanner scanUpToString:@"<" intoString:NULL]; [scanner scanString:@"<" intoString:NULL]; NSString* protocolName = nil; [scanner scanUpToString:@">" intoString: &protocolName]; return protocolName; } } return nil; } NSArray * ClassGetSubclasses(Class parentClass) { int numClasses = objc_getClassList(NULL, 0); Class *classes = NULL; classes = (Class *)malloc(sizeof(Class) * numClasses); numClasses = objc_getClassList(classes, numClasses); NSMutableArray *result = [NSMutableArray array]; for (NSInteger i = 0; i < numClasses; i++) { Class superClass = classes[i]; do { superClass = class_getSuperclass(superClass); } while(superClass && superClass != parentClass); if (superClass == nil) { continue; } [result addObject:classes[i]]; } free(classes); return result; }
рд▓реЙрдЧрд┐рди рд╕реНрдХреНрд░реАрди рдЙрджрд╛рд╣рд░рдг #import "BaseViewController.h" @protocol LoginProtocol <NSObject> @required - (void)login:(NSString *)aLoginString password:(NSString *)aPasswordString completionBlock:(DefaultCompletionBlock)aCompletionBlock; @end @interface LoginVC : BaseViewController @end #import "LoginVC.h" #import "UIViewController+Alert.h" #import "UIViewController+HUD.h" @interface LoginVC () @property id<LoginProtocol> model; @property (weak, nonatomic) IBOutlet UITextField *emailTF; @property (weak, nonatomic) IBOutlet UITextField *passTF; @end @implementation LoginVC @synthesize model = _model; #pragma mark - #pragma mark IBActions - (IBAction)loginAction:(id)sender { [self login]; } #pragma mark - #pragma mark UITextFieldDelegate - (BOOL)textFieldShouldReturn:(UITextField *)textField { if (textField == self.emailTF) { [self.passTF becomeFirstResponder]; } else { [self login]; } return YES; } #pragma mark - #pragma mark Login - (void)login { NSString *email = self.emailTF.text; NSString *pass = self.passTF.text; if (email.length == 0 || pass.length == 0) { [self showAlertOkWithMessage:@"Please, input info!"]; return; } __weak __typeof(self)weakSelf = self; [self showHUD]; [self.model login:self.emailTF.text password:self.passTF.text completionBlock:^(BOOL isDone, NSError *anError) { [weakSelf hideHUD]; if (isDone) { [weakSelf backWithOptions:nil]; } }]; } @end
рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕реАрдзреЗ рддрд░реАрдХреЗ рд╕реЗ, рдореИрдВрдиреЗ рджреЗрдЦрдиреЗ рдХреА рдЖрд▓рд╕реА рд╢реБрд░реБрдЖрдд рдХреА рдФрд░ рдореИрдбрд▓ рдХреЛ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде рдЦрд░рд╛рдм рддрд░реАрдХреЗ рд╕реЗ рдЬреЛрдбрд╝рд╛ред рдЗрд╕ рд╕рдм рдХреЗ рд╕рд╛рде, рдЙрд╕ рд╕рдордп рдореБрдЭреЗ рдЕрднреА рднреА рдПрдорд╡реАрдкреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдкрддрд╛ рдерд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореЗрд░реЗ рдКрдкрд░ рднреА рдХреБрдЫ рдРрд╕рд╛ рд╣реА рдерд╛ред
рд╕реНрдХреНрд░реАрди рдХреЗ рдмреАрдЪ рдиреЗрд╡рд┐рдЧреЗрд╢рди "viewModel" рдХреЗ рд╡рд┐рд╡реЗрдХ рдХреЗ рд▓рд┐рдП рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдордЬреЛрд░ рд▓рд┐рдВрдХ рдЬреЛрдбрд╝рд╛ рдерд╛ред
рдЕрдм рдЗрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдпрд╛рдж рдХрд░рддреЗ рд╣реБрдП, рдореИрдВ рдпрд╣ рдирд╣реАрдВ рдХрд╣ рд╕рдХрддрд╛ рдХрд┐ рдпрд╣ рд╕рдм рдХреБрдЫ рдмреБрд░рд╛ рдерд╛ред рдкрд░рддреЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдПрдХ рд╕рдлрд▓рддрд╛ рдереА, рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ рдореЙрдбрд▓ рдмрдирд╛рдиреЗ рдФрд░ рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдХрд╛ рдХреНрд╖рдг рд╕рд░рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рд▓реЗрдХрд┐рди рдЦреБрдж рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рддреИрдпрд╛рд░ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдФрд░ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЕрдкрдиреА рдЦреБрдж рдХреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдЖрд╡реЗрджрди рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рджреМрд░рд╛рди, рдореБрдЭреЗ рдХрдИ рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рд╕реЗ рдирд┐рдкрдЯрдирд╛ рдкрдбрд╝рд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реНрдХреНрд░реАрди рдФрд░ рдореЙрдбрд▓ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ, рд╡рд┐рд░рд╛рд╕рдд, рд╕реНрдХреНрд░реАрди рдХреЗ рдмреАрдЪ рдЬрдЯрд┐рд▓ рд╕рдВрдХреНрд░рдордгред рдЙрд╕ рд╕рдордп, рдпрд╣ рдореБрдЭреЗ рд▓рдЧ рд░рд╣рд╛ рдерд╛ рдХрд┐ viewModel рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдерд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЕрдм рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдЕрднреА рднреА рдПрдХ рдкреНрд░рд╕реНрддреБрддрд┐ рдкрд░рдд рд╣реИред рдЗрд╕ рдкреНрд░рдпреЛрдЧ рдХреЗ рджреМрд░рд╛рди рдореБрдЭреЗ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдЕрдиреБрднрд╡ рдорд┐рд▓рд╛ред
MVVM рдЖрддреНрдорд╛ MVP рдХреЗ рд╕рд╛рде
рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдиреБрднрд╡ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рд╕рд╛рдЗрдХрд┐рд▓ рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдЕрдкрдиреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдЪреБрдирдиреЗ рдФрд░ рдЙрд╕рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдореИрдВрдиреЗ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдкрдврд╝рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛, рдЙрд╕ рд╕рдордп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдФрд░ рдПрдорд╡реАрд╡реАрдПрдо рдкрд░ рдмрд╕рдиреЗ рдХреЗ рд▓рд┐рдПред рд╕рдЪ рдХрд╣реВрдБ рддреЛ, рдореИрдВ рддреБрд░рдВрдд рдЗрд╕рдХреЗ рд╕рд╛рд░ рдХреЛ рд╕рдордЭ рдирд╣реАрдВ рдкрд╛рдпрд╛, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЗрд╕реЗ рдЪреБрдирд╛ рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдирд╛рдо рдкрд╕рдВрдж рдЖрдпрд╛ред
рдореИрдВрдиреЗ рддреБрд░рдВрдд рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рд╕рд╛рд░ рдФрд░ ViewModel рдФрд░ View (ViewController) рдХреЗ рдмреАрдЪ рд╕рдВрдмрдВрдз рдХреЛ рдирд╣реАрдВ рд╕рдордЭрд╛, рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдореИрдВрдиреЗ рд╕рдордЭрд╛ рдерд╛ рд╡реИрд╕рд╛ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ред рдЖрдВрдЦреЗрдВ рдбрд░рддреА рд╣реИрдВ, рдФрд░ рд╣рд╛рде рдЬрдордХрд░ рдХреЛрдб рдЯрд╛рдЗрдк рдХрд░ рд░рд╣реЗ рд╣реИрдВред
рдЕрдкрдиреЗ рдмрдЪрд╛рд╡ рдореЗрдВ, рдореИрдВ рдпрд╣ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЙрд╕ рд╕рдордп рдФрд░ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдИ рдЧрдИ рд░рдЪрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдиреЗ рдФрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рдмрд╣реБрдд рддрдВрдЧ рдерд╛ред рдЗрд╕рд▓рд┐рдП, рдмрд╛рдЗрдВрдбрд░реЛрдВ рдХреЗ рдмрдЬрд╛рдп, рдореИрдВрдиреЗ ViewModel рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рджреГрд╢реНрдп рдХреЗ рд▓рд┐рдП рд╕реАрдзрд╛ рд▓рд┐рдВрдХ рдмрдирд╛рдпрд╛ред рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА ViewModel рдореЗрдВ, рдореИрдВрдиреЗ рдкреНрд░рд╕реНрддреБрддрд┐ рд╕реЗрдЯрдЕрдк рдХрд┐рдпрд╛ред
рдПрдорд╡реАрдкреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдореБрдЭреЗ рдЕрдиреНрдп рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд╣реА рд╡рд┐рдЪрд╛рд░ рдерд╛, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рджреГрдврд╝рддрд╛ рд╕реЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдерд╛ рдХрд┐ рдпрд╣ рдПрдорд╡реАрд╡реАрдПрдо рдерд╛, рдЬрд┐рд╕рдореЗрдВ рд╡реНрдпреВрдореЛрдбрд▓ рд╕рдмрд╕реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛ рдирд┐рдХрд▓рд╛ред
рдореЗрд░реЗ "рдПрдорд╡реАрд╡реАрдПрдо" рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдФрд░ рд╣рд╛рдБ, рдореБрдЭреЗ рд░реВрдЯрд╡реНрдпреВрдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЗ рд╕рд╛рде рд╡рд┐рдЪрд╛рд░ рдкрд╕рдВрдж рдЖрдпрд╛, рдЬреЛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ рдЙрдЪреНрдЪрддрдо рд╕реНрддрд░ рдХреЗ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред рд░рд╛рдЙрдЯрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдиреАрдЪреЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред import UIKit class RootViewController: UIViewController { var viewModel: RootViewModel? override func viewDidLoad() { super.viewDidLoad() let router = (UIApplication.shared.delegate as? AppDelegate)!.router viewModel = RootViewModel(with: self, router: router) viewModel?.setup() } } import UIKit protocol ViewModelProtocol: class { func setup() func backAction() } class RootViewModel: NSObject, ViewModelProtocol { unowned var router : RootRouter unowned var view: RootViewController init(with view: RootViewController, router: RootRouter) { self.view = view self.router = router }
рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рдЖрджреЗрд╢ рдФрд░ рдПрдХ рдПрдХрд▓ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рд╕рдореНрдорд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд▓реЗрдХрд┐рди рдЕрдиреБрднрд╡ рдЕрдореВрд▓реНрдп рдерд╛ред рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдИ рдЧрдИ рд╕рд╛рдЗрдХрд┐рд▓реЛрдВ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдЕрдВрддрддрдГ рдЖрдо рддреМрд░ рдкрд░ рд╕реНрд╡реАрдХреГрдд рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ред рдЬрдм рддрдХ рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛ рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рдерд╛, рдЬреЛ рдХрд┐рд╕реА рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдбреЗрд╡рд▓рдкрд░ рдХреЛ рднреНрд░рдорд┐рдд рдХрд░ рд╕рдХрддрд╛ рдерд╛ред
рдореИрдВрдиреЗ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдпрд╣ рдЫреЛрдЯреЗ рдкрд░реАрдХреНрд╖рдг рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ, рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдбрд┐рдЬрд╛рдЗрди рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рд░ рдореЗрдВ рддрд▓реНрд▓реАрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдЗрд╕рд▓рд┐рдП рдмреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдкрд╣рд▓реЗ рдЕрднреНрдпрд╛рд╕ рдореЗрдВ рд▓рдЧреЗрдВ, рдФрд░ рдлрд┐рд░ рд▓рдбрд╝рд╛рдИ рдореЗрдВ рднрд╛рдЧ рд▓реЗрдВред рдЗрд╕ рддрд░рд╣ рдХрд╛ рдирд┐рд╖реНрдХрд░реНрд╖ рдореИрдВрдиреЗ рдЦреБрдж рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рд╣реИред
рдиреЗрд╡рд┐рдЧреЗрд╢рди рдпрд╛ рд░рд╛рдЙрдЯрд░ рдФрд░ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдХреА рд╡рдХреНрд░рддрд╛ рдХреЗ рд╕рд╛рде рджреВрд╕рд░рд╛ рдкреНрд░рдпрд╛рд╕
рдЙрд╕реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░, рдЬрд╣рд╛рдВ рдореИрдВрдиреЗ рдмрд╣рд╛рджреБрд░реА рд╕реЗ рдФрд░ рднреЛрд▓реЗрдкрди рд╕реЗ MVVM рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛, рдореИрдВрдиреЗ рд╕реНрдХреНрд░реАрди рдХреЗ рдмреАрдЪ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдореЗрдВ рдПрдХ рдирдП рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рдореИрдВ рдЕрднреА рднреА рд╕реНрдХреНрд░реАрди рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рд╡рд┐рдЪрд╛рд░ рдФрд░ рдЙрдирдХреЗ рдмреАрдЪ рд╕рдВрдХреНрд░рдордг рдХреЗ рддрд░реНрдХ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддрд╛ рд╣реВрдВред
рдПрдорд╡реАрд╡реАрдПрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрдврд╝рдирд╛, рдореБрдЭреЗ рд░рд╛рдЙрдЯрд░ рдЬреИрд╕реЗ рдкреИрдЯрд░реНрди рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рдереАред рдлрд┐рд░ рд╕реЗ рд╡рд┐рд╡рд░рдг рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд╕рдорд╛рдзрд╛рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ред
рд░рд╛рдЙрдЯрд░ рдЙрджрд╛рд╣рд░рдг import UIKit protocol Router: class { func route(to routeID: String, from view: UIViewController, parameters: Any?) func back(from view: UIViewController, parameters: Any?) } extension Router { func back(from view: UIViewController, parameters: Any?) { let navigationController: UINavigationController = checkNavigationController(for: view) navigationController.popViewController(animated: false) } } enum RootRoutes: String { case launch = "Launch" case loginregistartion = "LoginRegistartionRout" case mainmenu = "MainMenu" } class RootRouter: Router { var loginRegistartionRouter: LoginRegistartionRouter? var mainMenuRouter: MainMenuRouter?
рдЗрд╕ рддрд░рд╣ рдХреЗ рдкреИрдЯрд░реНрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдореЗрдВ рдЕрдиреБрднрд╡ рдХреА рдХрдореА рдиреЗ рдЦреБрдж рдХреЛ рдорд╣рд╕реВрд╕ рдХрд┐рдпрд╛ рд╣реИред рд╕рдм рдХреБрдЫ рд╕рд╛рдл-рд╕реБрдерд░рд╛ рдФрд░ рд╕рд╛рдл рд▓рдЧ рд░рд╣рд╛ рдерд╛, рд░рд╛рдЙрдЯрд░ рдиреЗ рдПрдХ рдирдпрд╛ UIViewController рдХреНрд▓рд╛рд╕ рдмрдирд╛рдпрд╛, рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ ViewModel рдмрдирд╛рдпрд╛ рдФрд░ рдЗрд╕ рд╕реНрдХреНрд░реАрди рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрд░реНрдХ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ред рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА, рдХрдИ рдХрдорд┐рдпреЛрдВ рдиреЗ рдЦреБрдж рдХреЛ рдорд╣рд╕реВрд╕ рдХрд┐рдпрд╛ред
рдкреБрд╢ рдЕрдзрд┐рд╕реВрдЪрдирд╛ рдХреЗ рдмрд╛рдж рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реНрдХреНрд░реАрди рдХреЗ рд╕рд╛рде рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЦреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдиреЗ рдкрд░ рдХрдард┐рдирд╛рдЗрдпрд╛рдВ рдЙрддреНрдкрдиреНрди рд╣реЛрдиреЗ рд▓рдЧреАрдВред рдирддреАрдЬрддрди, рдХреБрдЫ рдЬрдЧрд╣реЛрдВ рдкрд░ рд╣рдореЗрдВ рд╕рд╣реА рд╕реНрдХреНрд░реАрди рдЪреБрдирдиреЗ рдХреЗ рд▓рд┐рдП рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рддрд░реНрдХ рдорд┐рд▓реЗ рдФрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдореЗрдВ рдФрд░ рдХрдард┐рдирд╛рдИ рд╣реБрдИред
рдореИрдВрдиреЗ рд░рд╛рдЙрдЯрд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд╡рд┐рдЪрд╛рд░ рдХреЛ рдирд╣реАрдВ рдЫреЛрдбрд╝рд╛, рд▓реЗрдХрд┐рди рдЗрд╕ рджрд┐рд╢рд╛ рдореЗрдВ рдЬрд╛рд░реА рд░рдЦрд╛, рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рдЕрдиреБрднрд╡ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ред рдкрд╣рд▓реЗ рдЕрд╕рдлрд▓ рдкреНрд░рдпрд╛рд╕ рдХреЗ рдмрд╛рдж рдХреБрдЫ рдЫреЛрдбрд╝рдирд╛ рдорддред
рд▓рдЧрд╛рддрд╛рд░ рдкреНрд░рдмрдВрдзрдХ
рдореЗрд░реЗ рдЕрднреНрдпрд╛рд╕ рдореЗрдВ рдПрдХ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рдкреНрд░рдмрдВрдзрдХ рд╡рд░реНрдЧред рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдпреБрд╡рд╛ рд╣реИред рд╕рднреА рд╕рдорд╛рди, рд╡рд┐рдХрд╛рд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдФрд░ рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИ, рдФрд░ рдЪреВрдВрдХрд┐ рд╣рдо рд╕рднреА, рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдпрд╛ рд╣рдо рдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢, рд╡рд┐рдХрд╛рд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд▓рдЧрд╛рддрд╛рд░ рд╣реЛрддреЗ рд╣реИрдВ, рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣рдореЗрд╢рд╛ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИрдВред
рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рд░ рдпрд╣ рд╣реИ, рдЖрд╡реЗрджрди рдореЗрдВ рдРрд╕реА рд╕реЗрд╡рд╛рдПрдВ рд╣реИрдВ рдЬреЛ рд▓рдЧрд╛рддрд╛рд░ рд▓рдЯрдХрд╛рдП рдЬрд╛рдиреЗ рдЪрд╛рд╣рд┐рдП рдФрд░ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдХрдИ рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред
рдЙрджрд╛рд╣рд░рдг: рдмреНрд▓реВрдЯреВрде рдХреА рд╕реНрдерд┐рддрд┐ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдгред рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдореЗрдВ, рдХрдИ рд╕реЗрд╡рд╛рдУрдВ рдореЗрдВ рдореБрдЭреЗ рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдмреНрд▓реВрдЯреВрде рдЪрд╛рд▓реВ рдпрд╛ рдмрдВрдж рд╣реИ рдФрд░ рд╕реНрдерд┐рддрд┐ рдЕрдкрдбреЗрдЯ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдВред рдЪреВрдБрдХрд┐ рдРрд╕реА рдХрдИ рдЬрдЧрд╣реЗрдВ рд╣реИрдВ: рдПрдХ рджреЛ рд╕реНрдХреНрд░реАрди, рдХрдИ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдкреНрд░рдмрдВрдзрдХ, рдЖрджрд┐, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП CBPeripheralManager (рдпрд╛ CBCentralManager) рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЛ рд╕рджрд╕реНрдпрддрд╛ рджреЗрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рд╕рдорд╛рдзрд╛рди рд╕реНрдкрд╖реНрдЯ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ, рд╣рдо рдПрдХ рдЕрд▓рдЧ рд╡рд░реНрдЧ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬреЛ рдмреНрд▓реВрдЯреВрде рдХреА рд╕реНрдерд┐рддрд┐ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕рднреА рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдСрдмреНрдЬрд░реНрд╡рд░ рдкреИрдЯрд░реНрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдлрд┐рд░ рд╕рд╡рд╛рд▓ рдпрд╣ рдЙрдарддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рд╕реЗрд╡рд╛ рдХреЛ рд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рдХреМрди рд╕рдВрдЪрд┐рдд рдХрд░реЗрдЧрд╛? рдкрд╣рд▓реА рдмрд╛рдд рдЬреЛ рдЗрд╕ рд╕рдордп рджрд┐рдорд╛рдЧ рдореЗрдВ рдЖрддреА рд╣реИ, рд╡рд╣ рд╣реИ рдЗрд╕реЗ рдПрдХ рд╕рд┐рдВрдЧрд▓рдЯрди рдмрдирд╛рдирд╛! рд╕рдм рдХреБрдЫ рдареАрдХ рд▓рдЧ рд░рд╣рд╛ рд╣реИ!
рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рд╡рд╣ рдХреНрд╖рдг рдЖрддрд╛ рд╣реИ рдХрд┐ рдореЗрд░реЗ рдЖрд╡реЗрджрди рдореЗрдВ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдРрд╕реА рд╕реЗрд╡рд╛ рдЬрдорд╛ рд╣реЛ рдЧрдИ рд╣реИред рдореИрдВ рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ 100500 рдПрдХрд▓ рднреА рдирд╣реАрдВ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддрд╛ред
рдФрд░ рдлрд┐рд░ рдПрдХ рдФрд░ рдкреНрд░рдХрд╛рд╢ рдореЗрд░реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрдЬреНрдЬреНрд╡рд▓ рдЫреЛрдЯреЗ рд╕рд┐рд░ рдХреЗ рдКрдкрд░ рдЖрдпрд╛ред рдПрдХ рд╕рд┐рдВрдЧрд▓рдЯрди рдмрдирд╛рдПрдВ рдЬреЛ рдЗрд╕ рддрд░рд╣ рдХреА рд╕рднреА рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдЧрд╛ рдФрд░ рдкреВрд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рддрдХ рдЙрдирдХреА рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛ред рдФрд░ рдЗрд╕рд▓рд┐рдП "рд╕реНрдерд╛рдпреА рдкреНрд░рдмрдВрдзрдХ" рдХрд╛ рдЬрдиреНрдо рд╣реБрдЖред рдирд╛рдо рдХреЗ рд╕рд╛рде, рдореИрдВрдиреЗ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдирд╣реАрдВ рд╕реЛрдЪрд╛ рдерд╛ рдФрд░ рдЗрд╕реЗ рдмреБрд▓рд╛рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╣рд░ рдХреЛрдИ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд╕рдХрддрд╛ рдерд╛, PersistentManagerред
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдореЗрд░реЗ рдкрд╛рд╕ рдХреНрд▓рд╛рд╕ рдирд╛рдордХрд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╣реБрдд рд╣реА рдореВрд▓ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдЕрдкрдиреА рд╡рд┐рдХрд╛рд╕ рдпреЛрдЬрдирд╛ рдореЗрдВ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рдирд╛рдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд╕рдирдХ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред
рдЗрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдореБрдЦреНрдп рдореБрджреНрджрд╛ рд╕рд┐рдВрдЧрд▓рдЯрди рд╣реИ, рдЬреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдХрд╣реАрдВ рднреА рдЙрдкрд▓рдмреНрдз рд╣реИред рдФрд░ рдпрд╣ рдЗрд╕ рддрдереНрдп рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рд╕реНрдерд╛рдпреА рд╕реЗрд╡рд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рдмрдВрдзрдХ рдЗрд╕реЗ рдЕрдкрдиреЗ рддрд░реАрдХреЛрдВ рдХреЗ рдЕрдВрджрд░ рдПрдХреНрд╕реЗрд╕ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИред рдкрд╣рд▓реА рдмрд╛рд░, рдореБрдЭреЗ рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдЬрдм рдореИрдВ рдПрдХ рдЕрд▓рдЧ рдбреЗрдореЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдПрдХ рдмрдбрд╝реА рдЬрдЯрд┐рд▓ рд╡рд┐рд╢реЗрд╖рддрд╛ рдмрдирд╛ рд░рд╣рд╛ рдерд╛ рдФрд░ рдореБрдЦреНрдп рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд░рд╣рд╛ рдерд╛ред рдлрд┐рд░ рдореИрдВрдиреЗ рдЧреБрдо рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ред
рдЗрд╕рдХреЗ рдмрд╛рдж рдореИрдВрдиреЗ рдЬреЛ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓рд╛, рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЕрдкрдиреА рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдбрд┐рдЬрд╛рдЗрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рдЫрд┐рдкреА рд╣реБрдИ рдирд┐рд░реНрднрд░рддрд╛ рди рд╣реЛред рд╡рд░реНрдЧ рдХреЛ рд╢реБрд░реВ рдХрд░рддреЗ рд╕рдордп рдЖрд╡рд╢реНрдпрдХ рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдПрдХ рд╕рд┐рдВрдЧрд▓рдЯрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛, рдЬрд┐рд╕реЗ рдХрд╣реАрдВ рд╕реЗ рднреА рдПрдХреНрд╕реЗрд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдФрд░ рдЗрд╕рд╕реЗ рднреА рдЕрдзрд┐рдХ рдЦреВрдмрд╕реВрд░рддреА рд╕реЗ, рдпрд╣ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИред
рдпрд╣ рдПрдХ рд╕рд┐рдВрдЧрд▓рдЯрди рдкреИрдЯрд░реНрди рдХреА рдХрдореА рдХреА рдПрдХ рдФрд░ рдкреБрд╖реНрдЯрд┐ рд╣реБрдИред
рдкрд░рд┐рдгрд╛рдо
рдФрд░ рд╡рд╣, рдореИрдВ рдЕрднреА рднреА рдЦрдбрд╝рд╛ рдирд╣реАрдВ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЖрдЧреЗ рдмрдврд╝реЗрдВ, рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ рдирдП рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдореЗрдВ рдорд╣рд╛рд░рдд рд╣рд╛рд╕рд┐рд▓ рдХрд░реЗрдВред рдореБрдЦреНрдп рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛, рддрд▓рд╛рд╢ рдХрд░рдирд╛ рдФрд░ рдкреНрд░рдпреЛрдЧ рдХрд░рдирд╛ред рдЧрд▓рддрд┐рдпрд╛рдБ рд╣рдореЗрд╢рд╛ рд░рд╣реЗрдВрдЧреА, рдЗрд╕рд╕реЗ рдХреЛрдИ рдмрдЪрд╛ рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рд╕рд┐рд░реНрдл рдПрдХ рдХреА рдЧрд▓рддрд┐рдпреЛрдВ рдХреА рдкрд╣рдЪрд╛рди рдХреЗ рдХрд╛рд░рдг, рдХреЛрдИ рдЧреБрдгрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

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