рдЕрдиреБрд╡рд╛рджрдХ рд╕реЗ
рд╣рдо рдпрд╣рд╛рдВ рджреЛ рд░реВрд╕реА рднрд╛рд╖реА рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣реЗ рдереЗ - рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рддрд╣рдд рдЖрдИрдУрдПрд╕ рдФрд░ рд╕реА ++ рдкрд░ред рдореИрдВрдиреЗ рджрд░реНрдЬрдиреЛрдВ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдПред рджреЛ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ OOP рдЬреНрдЮрд╛рди рдореЗрдВ рдЕрдВрддрд░ рдмрд╣реБрдд рдмрдбрд╝рд╛ рд╣реИред рд╕реА ++ рдореЗрдВ, рдЖрдорддреМрд░ рдкрд░ рд╕реБрдВрджрд░ рдПрдХреНрд╕реНрдЯреЗрдВрд╕рд┐рдмрд▓ рдХреЛрдб, рдкрд╛рдареНрдпрдХреНрд░рдо рдХреЗ рд░реВрдк рдореЗрдВред рдЙрджреНрджреЗрд╢реНрдп-рд╕реА рдкрд░, рдЪрд┐рддреНрд░ рдирд┐рд░рд╛рд╢рд╛рдЬрдирдХ рд╣реИред рд▓рдЧрднрдЧ рд╕рднреА рдЖрдИрдУрдПрд╕ рдЙрдореНрдореАрджрд╡рд╛рд░реЛрдВ рдХреЛ
рдЙрдирдХреА рдирд╛рдХ NSString
рдХреЗ рдФрд░
AppDelegate
рдкрд░реЗ OOP рдирд╣реАрдВ рдкрддрд╛ рдерд╛ред
рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдкреЗрд╢реЗрд╡рд░реЛрдВ рдХреЛ рд╕реНрдЯреНрд░реИрд╕рдкреБрдк рдФрд░ "рдЪрд╛рд░ рдХреЗ рдЧрд┐рд░реЛрд╣" рджреНрд╡рд╛рд░рд╛ рдкрдврд╝рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЙрджреНрджреЗрд╢реНрдп-рд╕реА рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдФрд░ рд╕реНрдЯреИрдХ рдУрд╡рд░рдлреНрд▓реЛ рджреНрд╡рд╛рд░рд╛ рдЕрдзрд┐рдХ рд╕рд┐рдЦрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдлрд╛рд╕реНрдЯ рдлреВрдб рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдореМрд▓рд┐рдХ рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЬрдЧрд╣ рдирд╣реАрдВ рдЫреЛрдбрд╝рддрд╛ ... рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЕрдВрддрд░ рдХреА рдЙрдореНрдореАрдж рдирд╣реАрдВ рдереАред
рдЗрд╕рд▓рд┐рдП, рдореИрдВрдиреЗ рдПрдХ рдкреЛрд╕реНрдЯ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд┐рдпрд╛ рдЬрд┐рд╕рдореЗрдВ iOS рдкрд░ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдбрд┐рдЬрд╛рдЗрди рдкреИрдЯрд░реНрди рдкрд░ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рджреА рдЧрдИ рд╣реИ ... "рдкреНрд░рд╛рд░рдВрднрд┐рдХ"? рд╣рд╛рдБ, рддреЛ рдПрдХ рдЕрдЧрд▓реА рдХрдбрд╝реА рд╣реЛрдЧреА? рдирд╣реАрдВ, рдпрд╣ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдЖрдк рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛
рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд
рдХрд░рдиреЗ рдХреЗ рдкреНрд░рдпрд╛рд╕реЛрдВ рд╕реЗ рдЕрдиреБрднрд╡ рд╕реЗ рдЖрдЧреЗ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рд╢рд╛рдпрдж рдЗрдорд╛рд░рдд рдХрд╛ рдореБрдЦреМрдЯрд╛ рдЪрд┐рдордиреА рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдПрдХ рд╕рдордЭ рдЖрдПрдЧреА рдХрд┐ рдХреМрди рд╕реА рддрдХрдиреАрдХреЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорджрдж рдХрд░рддреА рд╣реИрдВред
рдЙрдЪреНрдЪ рдЧреБрдгрд╡рддреНрддрд╛ рд╡рд╛рд▓реЗ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд╡рд┐рдХрд╛рд╕ рдПрдХ рд░рдЪрдирд╛рддреНрдордХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИ рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рд┐рд░ рдХреЗ рд▓рд┐рдП рдЕрджреНрд╡рд┐рддреАрдп рд╣реИред рдЗрд╕рд▓рд┐рдП, рдХреЛрдИ рд╕рд╛рдорд╛рдиреНрдп рдирд┐рд░реНрджреЗрд╢ рдирд╣реАрдВ рд╣реИ:
if (A and (B or C)) then use Pattern_N;
рдмрд╕ рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдЕрдзрд┐рдХ рдмрд╛рд░ рдкреВрдЫреЗрдВ: рдореИрдВрдиреЗ рдЬреЛ рд▓рд┐рдЦрд╛ рд╣реИ рд╡рд╣ рд╕реБрдВрджрд░ рд╣реИ?рддреНрдпрд╛рдЧрдкреИрдЯрд░реНрди рдПрдХ рд░рд╛рдордмрд╛рдг рдирд╣реАрдВ рд╣реИ, рдХреБрдЯрд┐рд▓ рд╣рд╛рдереЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд▓рд╛рдЬ рдирд╣реАрдВ рд╣реИ, рдФрд░ рджрд┐рдорд╛рдЧ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИред рдпрд╣рд╛рдБ рд╕реНрдЯреИрдВрд╕рд┐рд▓ рд╣реИ:

рд╡рд╣ рдЖрдХрд░реНрд╖рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ! рдЖрдк рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ - рдЖрдкред
рдПрдХ рдкреИрдЯрд░реНрди рдХреНрдпрд╛ рд╣реИ?
рдкреИрдЯрд░реНрди рдХрд╛ рд╡рд┐рдЪрд╛рд░ рд▓рдЧрднрдЧ 40 рд╕рд╛рд▓ рдкрд╣рд▓реЗ рд╡рд╛рд╕реНрддреБрдХрд╛рд░
рдХреНрд░рд┐рд╕реНрдЯреЛрдлрд░ рдЕрд▓реЗрдХреНрдЬреЗрдВрдбрд░ рджреНрд╡рд╛рд░рд╛ рдЖрдпрд╛ рдерд╛:
рдХреЛрдИ рднреА рдкреИрдЯрд░реНрди рдПрдХ рдРрд╕реЗ рдХрд╛рд░реНрдп рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╣рдорд╛рд░реЗ рдХрд╛рдо рдореЗрдВ рдмрд╛рд░-рдмрд╛рд░ рдЙрдарддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рдЗрд╕рдХреЗ рд╕рдорд╛рдзрд╛рди рдХрд╛ рд╕рд┐рджреНрдзрд╛рдВрдд рднреА рд╣реИ, рдФрд░ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд┐ рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдХреЛ рдлрд┐рд░ рд╕реЗ рдПрдХ рд▓рд╛рдЦ рдмрд╛рд░ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЪреАрдЬ рдХреЛ рдкреБрдирд░реНрдЬреАрд╡рд┐рдд рдХрд┐рдПред
рдкреНрд░реЛрдЧреНрд░рд╛рдорд░реНрд╕ рдиреЗ рдЗрд╕реЗ рджреЗрдЦрд╛ рдФрд░
рдХрд╣рд╛ :
рдпрджреНрдпрдкрд┐ рдЕрд▓реЗрдХреНрдЬреЗрдВрдбрд░ рдиреЗ рдЗрдорд╛рд░рддреЛрдВ рдФрд░ рд╢рд╣рд░реЛрдВ рдХреЗ рдбрд┐рдЬрд╛рдЗрди рдореЗрдВ рдЙрддреНрдкрдиреНрди рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдкреИрдЯрд░реНрди рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрд╛ рдерд╛, рдЙрдирдХреЗ рд╢рдмреНрдж рд╡рд╕реНрддреБ-рдЙрдиреНрдореБрдЦ рдбрд┐рдЬрд╛рдЗрди рдХреЗ рдкреИрдЯрд░реНрди рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рд╕рдЪ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдирд┐рд░реНрдгрдп рд╡рд╕реНрддреБрдУрдВ рдФрд░ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╡реНрдпрдХреНрдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рди рдХрд┐ рджреАрд╡рд╛рд░реЛрдВ рдФрд░ рджрд░рд╡рд╛рдЬреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ, рд▓реЗрдХрд┐рди рджреЛрдиреЛрдВ рд╣реА рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдкреИрдЯрд░реНрди рдХрд╛ рдЕрд░реНрде рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рд╕рдВрджрд░реНрдн рдореЗрдВ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рдирд╛ рд╣реИред
рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдореИрдВ рдкреИрдЯрд░реНрди рдХреЛ "рдЯреЗрдореНрдкрд▓реЗрдЯ" рдирд╣реАрдВ рдХрд╣реВрдВрдЧрд╛, рдЗрд╕рд▓рд┐рдП
рд╕реА ++ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рд╕рд╛рде рднреНрд░рдорд┐рдд рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреЛ рдХрд┐ рдЙрджреНрджреЗрд╢реНрдп рд╕реА рдореЗрдВ рдЬреАрд╡рди рдХрд╛ рдЕрдзрд┐рдХрд╛рд░ рднреА рд╣реИред
рдпрд╣ рдкрд░рд┐рдЪрдп рд╕рдорд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЕрдВрдд рдореЗрдВ рд▓реЗрдЦ рдХреЗ рд▓реЗрдЦрдХ рдХреЛ рдлрд░реНрд╢ рд╕реЗ рдЧреБрдЬрд░рддрд╛ рд╣реИред
- рдиреЛрдЯ рдкреНрд░рддрд┐ред :)рд╣рд╛рд▓рд╛рдВрдХрд┐ рдирд╣реАрдВ, рдкреИрдЯрд░реНрди рдХреЗ рдорд╣рддреНрд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдФрд░ рд╡рд┐рд╖рдпрд╛рдВрддрд░ред... рдпрд╛рддреНрд░реА рдЧрд▓реА рд╕реЗ рдЪрд▓реЗ рдФрд░ рдЦреБрдж рдХреЛ рдЙрд╕ рдХреНрд╡рд╛рд░реНрдЯрд░ рдореЗрдВ рдкрд╛рдпрд╛, рдЬреЛ рд╕реНрддрдВрднреЛрдВ рд╡рд╛рд▓реЗ рдШрд░реЛрдВ рдХреЗ рд╕рд╛рде рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдХреЙрд▓рдо рд╕реАрдзреЗ рдФрд░ рдШреБрдорд╛рд╡рджрд╛рд░ рджреЛрдиреЛрдВ рдереЗ, рдФрд░ рдореБрдбрд╝, рдФрд░ рдореБрдбрд╝, рдФрд░ рд╕рд░реНрдкрд┐рд▓, рдФрд░ рддрд┐рд░рдЫреЗ, рдФрд░ рдЪрдкрдЯреЗ, рдФрд░ рддрд┐рд░рдЫреЗ, рдФрд░ рдкреИрдирдХреЗрдХ рдЬреИрд╕реЗ, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд┐рдирдХрд╛ рдЖрдкрдХреЛ рдирд╛рдо рдирд╣реАрдВ рдорд┐рд▓ рд░рд╣рд╛ рд╣реИред рдШрд░реЛрдВ рдХреЗ рдИрдЧрд▓ рднреА рд╕реАрдзреЗ рдереЗ, рдФрд░ рддрд┐рд░рдЫреЗ, рдФрд░ рдШреБрдорд╛рд╡рджрд╛рд░, рдФрд░ рдЯреВрдЯреЗ рд╣реБрдП, рдФрд░ рдЬрд╝рд┐рдЧрдЬрд╝реИрдЧред рдХреБрдЫ рдШрд░реЛрдВ рдореЗрдВ, рд╕реНрддрдВрдн рдиреАрдЪреЗ рдирд╣реАрдВ рдереЗ, рдЬреИрд╕рд╛ рдХрд┐ рдЕрдкреЗрдХреНрд╖рд┐рдд рдерд╛, рд▓реЗрдХрд┐рди рдКрдкрд░ рд╕реЗ, рдЫрддреЛрдВ рдкрд░; рдЕрдиреНрдп рдШрд░реЛрдВ рдХреЗ рд╕реНрддрдВрдн рдиреАрдЪреЗ рдереЗ, рд▓реЗрдХрд┐рди рдордХрд╛рди рд╕реНрд╡рдпрдВ рд╕реНрддрдВрднреЛрдВ рдХреЗ рдКрдкрд░, рдКрдкрд░ рдЦрдбрд╝реЗ рдереЗ; рддреАрд╕рд░реЗ рдореЗрдВ, рд╕реНрддрдВрднреЛрдВ рдХреЛ рдХреЙрд░реНрдирд┐рд╕ рд╕реЗ рдирд┐рд▓рдВрдмрд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдФрд░ рд░рд╛рд╣рдЧреАрд░реЛрдВ рдХреЗ рд╕рд┐рд░ рдкрд░ рд▓рдЯрдХ рдЧрдПред рдиреАрдЪреЗ рдПрдХ рдХрдВрдЧрдиреА рдХреЗ рд╕рд╛рде рдПрдХ рдШрд░ рдерд╛, рдФрд░ рд╕реНрддрдВрдн рдЙрд▓реНрдЯрд╛ рдЦрдбрд╝рд╛ рдерд╛ рдФрд░, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ рддрд░рдл squintedред рд╕реНрддрдВрднреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдШрд░ рднреА рдерд╛, рдЬреЛ рд╕реАрдзрд╛ рдЦрдбрд╝рд╛ рдерд╛, рд▓реЗрдХрд┐рди рдШрд░ рдЦреБрдж рд╕реЗ рдкреВрдЫрддреЗ рдереЗ, рдЬреИрд╕реЗ рдХрд┐ рд░рд╛рд╣рдЧреАрд░реЛрдВ рдХреЗ рд╕рд┐рд░ рдкрд░ рдЧрд┐рд░рдирд╛ред рдПрдХ рдШрд░ рдРрд╕рд╛ рднреА рдерд╛ рдЬрд╣рд╛рдБ рд╕реНрддрдВрдн рдПрдХ рддрд░рдл рдЭреБрдХрддреЗ рдереЗ рдФрд░ рдШрд░ рджреВрд╕рд░реЗ рдХреЛ рдЭреБрдХрддрд╛ рдерд╛, рдЬрд┐рд╕рд╕реЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рдерд╛ рдХрд┐ рдпрд╣ рд╕рдм рдЕрдм рдЬрдореАрди рдкрд░ рдЧрд┐рд░ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдзреВрд▓ рдореЗрдВ рдЧрд┐рд░ рдЬрд╛рдПрдЧрд╛ред
рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЯ рдХреБрдмрд┐рдХ рдиреЗ рдХрд╣рд╛, "рдЖрдк рдЗрди рддрд┐рд░рдЫреЗ рдШрд░реЛрдВ рдХреЛ рдирд╣реАрдВ рджреЗрдЦреЗрдВрдЧреЗред" - рдПрдХ рдмрд╛рд░, рдпрд╣ рдЙрди рдШрд░реЛрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдлреИрд╢рди рдерд╛ рдЬреЛ рдХреБрдЫ рднреА рдирд╣реАрдВ рджрд┐рдЦрддреЗ рдереЗред рддреЛ рдЙрдиреНрд╣реЛрдВрдиреЗ рдРрд╕рд╛ рдЕрдкрдорд╛рди рдХрд┐рдпрд╛ рдХрд┐ рдЕрдм рддреЛ рд╢рд░реНрдо рднреА рдЖрддреА рд╣реИ!
рдПрдиред рдиреЛрд╕реЛрд╡ред "рд╕реМрд░ рд╢рд╣рд░ рдореЗрдВ рдбрдиреЛ"
рд╣рд╛рд▓рд╛рдВрдХрд┐ рдХрдИ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЗрд╕ рдмрд╛рдд рд╕реЗ рд╕рд╣рдордд рд╣реИрдВ рдХрд┐ рдкреИрдЯрд░реНрди рдХрд╛ рд╡рд┐рд╖рдп рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдзрд┐рдХ рд▓реЗрдЦ рд╕рдорд░реНрдкрд┐рдд рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рд╣рдо рдЕрдХреНрд╕рд░ рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╕рдордп рдкреИрдЯрд░реНрди рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВред
рдПрдХ рдкреИрдЯрд░реНрди рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИред рдПрдХ рд╕рдорд╛рдзрд╛рди рдЬреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рджреЛрд╣рд░рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдкреИрдЯрд░реНрди рдХреЛрдб рдХреЛ рд╕рдордЭрдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рдмрдирд╛рддреЗ рд╣реИрдВред рд╡реЗ рд╢рд┐рдерд┐рд▓ рдпреБрдЧреНрдорд┐рдд рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддреЗ рд╣реИрдВ - рдПрдХ рдРрд╕рд╛ рдХреЛрдб рдЬрд┐рд╕рдореЗрдВ рдЖрдк рдШрдЯрдХреЛрдВ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдЗрд╕рдХреЗ рдПрдирд╛рд▓реЙрдЧ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдВрдкреВрд░реНрдг рдШрдЯрдХ рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ,
рд▓рдЧрднрдЧ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдмрд╛рдХреА рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдЫреВрдиреЗ рдХреЗ рдмрд┐рдирд╛ред
рдпрджрд┐ рдЖрдк рдбрд┐рдЬрд╛рдЗрди рдкреИрдЯрд░реНрди рдХреЗ рд╡рд┐рд╖рдп рдореЗрдВ рдирдП рд╣реИрдВ, рддреЛ рдореЗрд░реЗ рд▓рд┐рдП рдЖрдкрдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫреА рдЦрдмрд░ рд╣реИ! рдкрд╣рд▓рд╛: рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЙрди рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рдЬреЛ рдХреЛрдХреЛ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред (рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ Apple рдХреЛ рдбреЗрд╡рд▓рдкрд░.apple.com рдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рдЬрд▓реНрджреА рдХреЛрдб рд╕реЗ рдирд╣реАрдВ рд░реЛрдХрддрд╛ рд╣реИ -
рдиреЛрдЯ рдкреНрд░рддрд┐ред ) рджреВрд╕рд░рд╛: рдпрд╣ рд▓реЗрдЦ рдЖрдкрдХреЛ рдореВрд▓ (рдФрд░ рди рдХреЗрд╡рд▓ рдореВрд▓) рдбрд┐рдЬрд╛рдЗрди рдкреИрдЯрд░реНрди рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдХрд░рд╛рдПрдЧрд╛ рдЬреЛ рдЖрдорддреМрд░ рдкрд░ рдХреЛрдХреЛ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
рдкреНрд░рддреНрдпреЗрдХ рдкреИрдЯрд░реНрди рдХреЗ рд▓рд┐рдП, рд╣рдо рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ:
- рдпрд╣ рдкреИрдЯрд░реНрди рдХреНрдпрд╛ рд╣реИ;
- рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ;
- рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ;
- рдПрдХ рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рд╕рд╛рдорд╛рдиреНрдп рдЧрд▓рддрд┐рдпрд╛рдБ (рдпрджрд┐ рдХреЛрдИ рд╣реЛ)ред
рдЪреВрдВрдХрд┐ рдЕрднреНрдпрд╛рд╕ рдХреЗ рдмрд┐рдирд╛ рдкреИрдЯрд░реНрди рдХрд╛ рдЕрдзреНрдпрдпрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╣рдо рдПрдХ рдкрд░реАрдХреНрд╖рдг рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓рд┐рдЦреЗрдВрдЧреЗ - рдПрдХ рд╕рдВрдЧреАрдд рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЬреЛ рдЖрдкрдХреЗ рдПрд▓реНрдмрдо рдФрд░ рдЙрди рдкрд░ рдЬрд╛рдирдХрд╛рд░реА рджрд┐рдЦрд╛рдПрдЧреАред рд╡рд┐рдХрд╛рд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рджреМрд░рд╛рди, рдЖрдк рдХреБрдЫ рдкреИрдЯрд░реНрди рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдВрдЧреЗ:
рдкреАрдврд╝реАрдЧрдд рдкреИрдЯрд░реНрди (рд╕реГрдЬрдирд╛рддреНрдордХ) рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдЙрд╕ рддрд░рд╣ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рд╡рд╕реНрддреБрдПрдБ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИрдВ:
- рдПрдХрд▓ (рд╕рд┐рдВрдЧрд▓рдЯрди)
- рд╕рд╛рд░ рдХрд╛рд░рдЦрд╛рдирд╛
рд╕рдВрд░рдЪрдирд╛рддреНрдордХ рдкреИрдЯрд░реНрди рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдмреАрдЪ рд╕рдВрдмрдВрдзреЛрдВ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░рдиреЗ рдХреЗ рд╕рд░рд▓ рддрд░реАрдХреЛрдВ рдХреА рддрд▓рд╛рд╢ рдХрд░рддреЗ рд╣реИрдВ:
- MVC (рд╡рд┐рд╡рд╛рджрд╛рд╕реНрдкрдж рд╡рд░реНрдЧреАрдХрд░рдг, рдареАрдХ рд╣реИ, рдЗрд╕реЗ рдпрд╣рд╛рдБ рд░рд╣рдиреЗ рджреЗрдВ ред - рдиреЛрдЯ рдкреНрд░рддрд┐ )
- рдбреЗрдХреЛрд░реЗрдЯрд░ (рдбреЗрдХреЛрд░реЗрдЯрд░)
- рдЕрдиреБрдХреВрд▓рдХ (рдЕрдиреБрдХреВрд▓рдХ)
- рдлрд╕рд╛рдб (рдореБрдЦреМрдЯрд╛)
- рд▓рд┐рдВрдХрд░ (рд╕рдордЧреНрд░)
рд╡реНрдпрд╡рд╣рд╛рд░ рдкреИрдЯрд░реНрди (рд╡реНрдпрд╡рд╣рд╛рд░) рдмрд╛рддрдЪреАрдд рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдмреАрдЪ "рд╕рдВрдЪрд╛рд░":
- рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ (рдкреНрд░реЗрдХреНрд╖рдХ)
- рдЕрднрд┐рднрд╛рд╡рдХ (рд╕реНрдореГрддрд┐ рдЪрд┐рдиреНрд╣)
- рдЬрд┐рдореНрдореЗрджрд╛рд░реА рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛
- рдХрдорд╛рди (рдЖрджреЗрд╢)
рд▓реЗрдЦ рдХреЗ рдЕрдВрдд рддрдХ, рд╣рдорд╛рд░рд╛ рдЖрд╡реЗрджрди рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛:

рд╢реБрд░реБрдЖрдд рд╣реЛ рд░рд╣реА рд╣реИ
рдЕрдкрдиреЗ рдкрд╕рдВрджреАрджрд╛ IDE рдпрд╛ Xcode рдореЗрдВ
BlueLibrary рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЦреЛрд▓реЗрдВред

рдЦрд╛рд▓реА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рдПрдХ рдирд┐рдпрдорд┐рдд ViewController рдФрд░ рдПрдХ рд╕рд░рд▓ HTTP рдХреНрд▓рд╛рдЗрдВрдЯ рд╣реИред
рдХреНрдпрд╛ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рд╣реА рдЖрдк Xcode рдпрд╛ AppCode рдореЗрдВ рдПрдХ рдирдпрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЖрдкрдХрд╛ рдХреЛрдб рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреИрдЯрд░реНрди рд╕реЗ рднрд░рд╛ рд╣реЛрддрд╛ рд╣реИ! рдПрдорд╡реАрд╕реА, "рдкреНрд░рддрд┐рдирд┐рдзрд┐", "рдкреНрд░реЛрдЯреЛрдХреЙрд▓", "рд╕рд┐рдВрдЧрд▓рдЯрди" - рдЖрдкрдХреЛ рдЙрдиреНрд╣реЗрдВ рдореБрдлреНрдд рдореЗрдВ рдорд┐рд▓рддрд╛ рд╣реИ! :)
рдкрд╣рд▓реЗ рдкреИрдЯрд░реНрди рдореЗрдВ рдЧреЛрддрд╛ рд▓рдЧрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рдПрд▓реНрдмрдо рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдФрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рдХрдХреНрд╖рд╛рдПрдВ рдмрдирд╛рдиреА рдЪрд╛рд╣рд┐рдПред
Xcode : рдлрд╝рд╛рдЗрд▓> рдирдпрд╛> рдлрд╝рд╛рдЗрд▓ ... рдпрд╛
.N рджрдмрд╛рдПрдБред
AppCode :
odeN > Xcode рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕реЗ рдлрд╝рд╛рдЗрд▓ ...
рдЦреБрд▓рдиреЗ рд╡рд╛рд▓реЗ рд╕рдВрд╡рд╛рдж рдореЗрдВ, рд╕реВрдЪреА рд╕реЗ рдЪреБрдиреЗрдВ:
iOS> рдХреЛрдХреЛ рдЯрдЪ> рдСрдмреНрдЬреЗрдХреНрдЯрд┐рд╡ рд╕реА рдХреНрд▓рд╛рд╕ ,
рдЕрдЧрд▓рд╛ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред рдХрдХреНрд╖рд╛ рдХреЛ
Album
рдХрд╣рд╛ рдЬрд╛рдП, рдФрд░ рдпрд╣
NSObject
рдХрд╛ рдПрдХ рдЙрдкрд╡рд░реНрдЧ рд╣реЛрдЧрд╛ред
Open.h рдЦреЛрд▓реЗрдВ рдФрд░
@interface
рдФрд░
@end
рдмреАрдЪ рдХрдИ рдЧреБрдг рдФрд░ рдПрдХ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝реЗрдВ:
@property (nonatomic, copy, readonly) NSString * title; @property (nonatomic, copy, readonly) NSString * artist; @property (nonatomic, copy, readonly) NSString * genre; @property (nonatomic, copy, readonly) NSString * coverUrl; @property (nonatomic, copy, readonly) NSString * year; - (id)initWithTitle:(NSString *)title artist:(NSString *)artist coverUrl:(NSString *)coverUrl year:(NSString *)year;
рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ: рд╕рднреА рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдореЗрдВ рдПрдХ
readonly
рдзреНрд╡рдЬ рд╣реЛрддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдореЗрдВ
Album
рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж рдЙрдиреНрд╣реЗрдВ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рдпрд╣ рд╡рд┐рдзрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝рд░ рд╣реИред рдПрдХ рдирдпрд╛ рдПрд▓реНрдмрдо рдмрдирд╛рддреЗ рд╣реБрдП, рд╣рдо рдпрд╣рд╛рдВ рдПрд▓реНрдмрдо, рдХрд▓рд╛рдХрд╛рд░, рдХрд╡рд░ URL рдФрд░ рд░рд┐рд▓реАрдЬрд╝ рдХреЗ рд╡рд░реНрд╖ рдХрд╛ рдирд╛рдо рджреЗрддреЗ рд╣реИрдВред
рдЕрдм
Album.m рдХреЛ рдЦреЛрд▓реЗрдВ рдФрд░
@implementation
рдФрд░
@end
рдХреЗ рдмреАрдЪ рдирд┐рдореНрди рдХреЛрдб рдЪрд┐рдкрдХрд╛рдПрдБ:
- (id)initWithTitle:(NSString *)title artist:(NSString *)artist coverUrl:(NSString *)coverUrl year:(NSString *)year { self = [super init]; if (self) { _title = title; _artist = artist; _coverUrl = coverUrl; _year = year; _genre = @"Pop"; } return self; }
рд╕рдмрд╕реЗ рдЖрдо рдкреНрд░рд╛рд░рдВрднрд┐рдХред
рдПрдХ рдФрд░
AlbumView
рдХреНрд▓рд╛рд╕ рдмрдирд╛рдПрдВ -
UIView
рдХрд╛ рдПрдХ рдЙрдкрд╡рд░реНрдЧред
AlbumView.h рдореЗрдВ, @interface
рдФрд░
@end
рдмреАрдЪ рдПрдХ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝реЗрдВ:
- (id)initWithFrame:(CGRect)frame albumCover:(NSString *)albumCover;
рдФрд░
AlbumView.m рдореЗрдВ рдЗрд╕ рдХреЗ рд╕рд╛рде
@implementation
рдФрд░
@end
рдХреЗ рдмреАрдЪ рдХреЛрдб рдмрджрд▓реЗрдВ:
@implementation AlbumView { UIImageView * coverImage; UIActivityIndicatorView * indicator; } - (id)initWithFrame:(CGRect)frame albumCover:(NSString *)albumCover { self = [super initWithFrame:frame]; if (self) {
рдкрд╣рд▓реА рдЪреАрдЬ рдЬреЛ рдЖрдкрдХреЛ
coverImage
рдЪрд╛рд╣рд┐рдП, рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЪрд░ рд╣реИ:
coverImage
ред рдпрд╣ рд╡реЗрд░рд┐рдПрдмрд▓ рдПрдХ рдХрд╡рд░ рдПрд▓реНрдмрдо рдЗрдореЗрдЬ рд╣реИред рджреВрд╕рд░рд╛
indicator
рдЪрд░ рдПрдХ рд╕рдВрдХреЗрддрдХ рд╣реИ рдЬреЛ рдШреВрдорддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдЧрддрд┐рд╡рд┐рдзрд┐ рд▓реЛрдб рдХрд░рддреЗ рд╕рдордп рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреЛ рджрд░реНрд╢рд╛рддреА рд╣реИред
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдлрд╝рд╛рдЗрд▓ (
*.m
) рдореЗрдВ рдпреЗ рдЪрд░ рдХреНрдпреЛрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓ (
*.h
) рдореЗрдВ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ? рдХреНрдпреЛрдВрдХрд┐ рдЕрдиреНрдп рд╡рд░реНрдЧреЛрдВ (
AlbumView
рдмрд╛рд╣рд░) рдХреЛ рдЗрди рдЪрд░реЛрдВ рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рдХрдХреНрд╖рд╛ рдХреЗ рдЕрдВрджрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдЕрдиреНрдп рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЗрдмреНрд░реЗрд░реА (рдпрд╛ рдлреНрд░реЗрдорд╡рд░реНрдХ) рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ рддреЛ рдпрд╣ рдмрд┐рдВрджреБ рдмреЗрд╣рдж рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред
рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ (theB) - рдмрд╕ рдПрдХ рдЪреЗрдХред рдХреНрдпрд╛ рд╕рдм рдареАрдХ рд╣реИ? рдлрд┐рд░ рддреИрдпрд╛рд░ рд╣реЛ рдЬрд╛рдУ: рдЖрдкрдХрд╛ рдкрд╣рд▓рд╛ рдкреИрдЯрд░реНрди!
рдПрдорд╡реАрд╕реА - рдкреИрдЯрд░реНрди рдХрд╛ рд░рд╛рдЬрд╛

рдореЙрдбрд▓ - рджреЗрдЦреЗрдВ - рдирд┐рдпрдВрддреНрд░рдХ, рдпрд╛ рдмрд╕ рдПрдорд╡реАрд╕реА, рдХреЛрдХреЛ рдХреА рдиреАрдВрд╡ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ, рдФрд░ рдирд┐рд╕реНрд╕рдВрджреЗрд╣ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдкреИрдЯрд░реНрди рд╣реИред рдпрд╣ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдЙрдирдХреА рднреВрдорд┐рдХрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╡рд░реНрдЧреАрдХреГрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХреЛрдб рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ (рдпрд╣ рдХреНрдпрд╛ рд╣реИ - рд╣рдо рдиреАрдЪреЗ рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВрдЧреЗ)ред
рддреАрди рднреВрдорд┐рдХрд╛рдПрдБ:
- рдПрдХ рдореЙрдбрд▓ рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдбреЗрдЯрд╛ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╣реЗрд░рдлреЗрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрдВрддреНрд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдореЗрдВ, рдореЙрдбрд▓
Album
рд╡рд░реНрдЧ рд╣реЛрдЧрд╛ред
- рдкреНрд░рд╕реНрддреБрддрд┐ (рджреЗрдЦреЗрдВ), рдХрднреА-рдХрднреА рд╡реЗ рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ "рджреГрд╢реНрдп" - рдореЙрдбрд▓ рдХреЗ рджреГрд╢реНрдп рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдирд┐рдпрдВрддреНрд░рдг рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмрд╛рддрдЪреАрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдорддреМрд░ рдкрд░, рдпреЗ рдЙрд╡рд┐рд╡рд┐ рдФрд░ рдЗрд╕рдХреЗ рдЙрдкрд╡рд░реНрдЧ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдореЗрдВ, рджреЗрдЦреЗрдВ
AlbumView
рд╡реНрдпреВ рд╣реИред
- рдирд┐рдпрдВрддреНрд░рдХ (рдХрдВрдЯреНрд░реЛрд▓рд░) рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рд╕рдордиреНрд╡рдп рдХрд░рддрд╛ рд╣реИред рдореЙрдбрд▓ рдбреЗрдЯрд╛ рддрдХ рдкрд╣реБрдВрдЪ рд╣реИ, рдЙрдиреНрд╣реЗрдВ рд╡рд┐рдЪрд╛рд░реЛрдВ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдШрдЯрдирд╛рдУрдВ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдбреЗрдЯрд╛ рдореЗрдВ рд╣реЗрд░рдлреЗрд░ рдХрд░рддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрд┐рд╕ рд╡рд░реНрдЧ рдХрд╛ рдирд┐рдпрдВрддреНрд░рдХ рд╣реЛрдЧрд╛? рд╕рд╣реА,
ViewController
ред
рдПрдорд╡реАрд╕реА рдкреИрдЯрд░реНрди рдХреЗ рд╕рд╣реА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдЖрд╡реЗрджрди рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рд╡рд╕реНрддреБ рдЗрди рд╕рдореВрд╣реЛрдВ рдореЗрдВ рд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рдореЗрдВ рдЖрддреА рд╣реИред

- рдореЙрдбрд▓ рдбреЗрдЯрд╛ рдореЗрдВ рдХрд┐рд╕реА рднреА рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИред рдмрджрд▓реЗ рдореЗрдВ, рдирд┐рдпрдВрддреНрд░рдХ рд╡рд┐рдЪрд╛рд░реЛрдВ рдореЗрдВ рдбреЗрдЯрд╛ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддрд╛ рд╣реИред
- рджреГрд╢реНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИред рдирд┐рдпрдВрддреНрд░рдХ, рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рдореЙрдбрд▓ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддрд╛ рд╣реИ рдпрд╛ рдЕрдиреБрд░реЛрдзрд┐рдд рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред
рдпрд╣ рд╕рдм рдХреНрдпреЛрдВ рд╣реИ? рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдлреЗрдВрдХреЗрдВ, рдФрд░ рдПрдХ рдХрдХреНрд╖рд╛ рдореЗрдВ рдкреНрд░рд╕реНрддреБрддрд┐ рдХреЗ рд╕рд╛рде рдореЙрдбрд▓ рдХреЛ рдорд┐рд▓рд╛рдПрдВ? рдпрд╣ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рдПрдЧрд╛!
рд╕рд╡рд╛рд▓ рджреЛ (рдкрд░рд╕реНрдкрд░) рдЪреАрдЬреЛрдВ рдХреЗ рдиреАрдЪреЗ рдЖрддрд╛ рд╣реИ:
- рдХреЛрдб рдЬреБрджрд╛рдИ;
- рдХреЛрдб рдкреБрди: рдЙрдкрдпреЛрдЧ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ред
рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ, рдкреНрд░рджрд░реНрд╢рди рдореЙрдбрд▓ рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рд╣реИред рдпрджрд┐ рдкреНрд░рд╕реНрддреБрддрд┐ рдореЙрдбрд▓ рдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рдХрд░рддреА рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдиреНрдп рдбреЗрдЯрд╛ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╣рдо рдЕрдкрдиреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдлрд┐рд▓реНрдореЛрдВ рдпрд╛ рдкреБрд╕реНрддрдХреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо рдЕрднреА рднреА рдореВрд╡реА рдФрд░ рдмреБрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
AlbumView
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ! рдФрд░ рдЕрдЧрд░ рд╣рдо рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреЛ рдПрд▓реНрдмрдореЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдЧрд╛, рд╣рдо рдЗрд╕рдореЗрдВ
Album
рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдпрд╣ рдПрдХ рдореЙрдбрд▓ рд╣реИ рдЬреЛ рдкреНрд░рд╕реНрддреБрддрд┐ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд╣реИред рдпрд╣ MVC рдХреА рд╢рдХреНрддрд┐ рд╣реИ!
MVC рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ
1. рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдЧ рдПрдХ рдореЙрдбрд▓, рдирд┐рдпрдВрддреНрд░рдХ рдпрд╛ рджреГрд╢реНрдп рд╣реИред рдПрдХ рд╡рд░реНрдЧ рджреЛ рднреВрдорд┐рдХрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝ рдирд╣реАрдВ рд╕рдХрддрд╛ рд╣реИ! рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рджреЛ рдХрдХреНрд╖рд╛рдПрдВ рдмрдирд╛рдХрд░ рдкрд╣рд▓рд╛ рдХрджрдо рдЙрдард╛рдпрд╛ рд╣реИ:
Album
рдФрд░
Album
AlbumView
ред
2.
рдЖрдк рдбреЗрд╡рд▓рдкрд░.apple.com рдкрд░ рджреЗрдЦреЗ рдЧрдП рдЖрддрдВрдХ рдХреЛ рднреВрд▓ рдЬрд╛рдПрдВ! рд╣рд╛рдВ, рд╡реЗ рдЙрджрд╛рд╣рд░рдг рдЬрд╣рд╛рдВ ViewController
рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рджреЛ рдпрд╛ рддреАрди рднреВрдорд┐рдХрд╛рдПрдВ рдирд┐рднрд╛рддреЗ рд╣реИрдВред - рдиреЛрдЯ рдкреНрд░рддрд┐ред3. рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рддреАрди рд╕рдореВрд╣ рдмрдирд╛рдПрдВ -
Model
,
View
рдФрд░
Controller
:

рдпрд╣ рдХреИрд╕реЗ рдХрд░реЗрдВ:
- рдлрд╝рд╛рдЗрд▓> рдирдпрд╛> рд╕рдореВрд╣ (рдпрд╛ рдХреАрдмреЛрд░реНрдб рд╕реЗ: рдРрдкрдХреЛрдб тМШтМеN> рд╕рдореВрд╣ рдореЗрдВ Xcode inN рдореЗрдВ), рд╕рдореВрд╣
Model
рдирд╛рдо рджреЗрдВред Controller
рдФрд░ View
рд▓рд┐рдП рдПрдХ рд╣реА рдСрдкрд░реЗрд╢рди рдХрд░реЗрдВред
- Album.h рдФрд░ Album.m рдХреЛ
Model
рд╕рдореВрд╣ рдореЗрдВ рдЦреАрдВрдЪреЗрдВред
рдПрд▓реНрдмрдо рд╕рдореВрд╣ рдореЗрдВ ViewView.h рдФрд░ AlbumView.m рдХреЛ рдЦреАрдВрдЪреЗрдВред
Controller
рд╕рдореВрд╣ рдореЗрдВ ViewController.h рдФрд░ ViewController.m рдЦреАрдВрдЪреЗрдВред
рдЕрдм рд╣рдорд╛рд░рд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрд┐рдирд╛ рдЗрдирд╕реЗ рдмрд╣реБрдд рдмреЗрд╣рддрд░ рд▓рдЧ рд░рд╣рд╛ рд╣реИ ... рдлрд╛рдЗрд▓реЗрдВ рддреИрд░ рд░рд╣реА рд╣реИрдВред рдмреЗрд╢рдХ, рдЖрдк рдЕрдиреНрдп рд╕рдореВрд╣ рдФрд░ рдХрдХреНрд╖рд╛рдПрдВ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореБрдЦреНрдп рдмрд╛рдд рдпреЗ рддреАрди рд╢реНрд░реЗрдгрд┐рдпрд╛рдВ рд╣реИрдВред
рдЕрдм рдЬрдм рдЖрдкрдХреЗ рдШрдЯрдХ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдХрд╣реАрдВ рдФрд░ рдПрд▓реНрдмрдо рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рдо рдПрдХ рдПрдкреАрдЖрдИ рд╡рд░реНрдЧ рдмрдирд╛рдПрдВрдЧреЗ рдЬрд┐рд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЖрдк рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдХрд╣реАрдВ рд╕реЗ рднреА рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдбрд┐рдЬрд╝рд╛рдЗрди рдкреИрдЯрд░реНрди рдкрд░ рдЖрддреЗ рд╣реИрдВ:
рд╕рд┐рдВрдЧрд▓ (рд╕рд┐рдВрдЧрд▓рдЯрди)
рдХреБрдВрд╡рд╛рд░рд╛ рдкреИрдЯрд░реНрди рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдкреВрд░реЗ рдЖрд╡реЗрджрди рдореЗрдВ рдЗрд╕ рд╡рд░реНрдЧ рдХрд╛ рдХреЗрд╡рд▓ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИред рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рдкрд╣реБрдВрдЪ рдмрд┐рдВрджреБ рд╣реИред рд╡рд┐рд▓рдВрдмрд┐рдд рдкреНрд░рд╛рд░рдВрдн рдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрдорддреМрд░ рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рдпрд╣ рдПрдХрд▓ рдЙрджрд╛рд╣рд░рдг рддрдм рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдкрд╣рд▓реА рдмрд╛рд░ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рдХреНрдпрд╛ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ Apple рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рд╡реНрдпрд╛рдкрдХ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: [NSUserDefaults standardUserDefaults]
, [UIApplication sharedApplication]
, [UIScreen mainScreen]
, [NSFileManager defaultManager]
- рдЗрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдзрд┐рдпрд╛рдБ рдПрдХ рд╕рд┐рдВрдЧрд▓рдЯрди рдСрдмреНрдЬреЗрдХреНрдЯ рд▓реМрдЯрд╛рддреА рд╣реИрдВредрдЖрдк рдкреВрдЫ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ рд╡рд░реНрдЧ рдХреЗ рджреЛ рдпрд╛ рдЕрдзрд┐рдХ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рдХреНрдпреЛрдВ рдХрд░реЗрдВред рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдЙрджрд╛рд╣рд░рдг рдХреНрдпреЛрдВ рдирд╣реАрдВ? рдореЗрдореЛрд░реА рдЕрдм рд╕рд╕реНрддреА рд╣реИ, рд╣реИ рдирд╛?
рдРрд╕реЗ рдорд╛рдорд▓реЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдЖрдкрдХреЛ рдХрдХреНрд╖рд╛ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ
Logger
рд╡рд░реНрдЧ рдХреЗ рдХрдИ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ (рдХреЗрд╡рд▓ рдпрджрд┐ рдЖрдк рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд▓реЙрдЧ рдирд╣реАрдВ рд▓рд┐рдЦрддреЗ рд╣реИрдВ)ред рдпрд╛ рд╡реИрд╢реНрд╡рд┐рдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд░реНрдЧ: рдХрдИ рд╕рд╛рдЭрд╛ рд╡рд░реНрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдереНрд░реЗрдб-рд╕реБрд░рдХреНрд╖рд┐рдд рдПрдХреНрд╕реЗрд╕ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП) рдХрдИ рдХрдХреНрд╖рд╛рдПрдВ рдЬреЛ рд╕рдВрднрд╡рдд: рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рд╕реЗрдЯрд┐рдВрдЧ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддреА рд╣реИрдВред
рдХреБрдВрд╡рд╛рд░рд╛ рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
рдЖрд░реЗрдЦ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:

Logger
рд╡рд░реНрдЧ рдХреЗ рдкрд╛рд╕ рдПрдХ
instance
рдкреНрд░реЙрдкрд░реНрдЯреА (рдПрдХ рдПрдХрд▓ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдкреЙрдЗрдВрдЯрд░) рдФрд░ рджреЛ рд╡рд┐рдзрд┐рдпрд╛рдБ рд╣реИрдВ:
sharedInstance()
рдФрд░
sharedInstance()
init()
ред
рдЬрдм рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд╣рд▓реЗ рд╕рд╛рдЭрд╛ рдХрд┐рдП рдЧрдП
sharedInstance()
рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рддреЛ
instance
рдкреНрд░реЙрдкрд░реНрдЯреА рдХреЛ рдЕрднреА рддрдХ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдлрд┐рд░ рдХреНрд▓рд╛рд╕ рдХрд╛ рдПрдХ рдирдпрд╛ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдкреЙрдЗрдВрдЯрд░ рд▓реМрдЯрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЕрдЧрд▓реА рдмрд╛рд░ рдЬрдм рд╣рдо
sharedInstance()
,
instance
рдмрд┐рдирд╛ рдкреНрд░рд╛рд░рдВрдн рдХреЗ рддреБрд░рдВрдд рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреА рдпреЛрдЬрдирд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреА рдкреВрд░реА рдЕрд╡рдзрд┐ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдХреА рдЧрд╛рд░рдВрдЯреА рджреЗрддреА рд╣реИред
рд╣рдо рдЗрд╕ рдкреИрдЯрд░реНрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдВрдЧреЗ: рд╕рднреА рдПрд▓реНрдмрдо рдбреЗрдЯрд╛ рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд┐рдВрдЧрд▓рдЯрди рдмрдирд╛рдПрдВред
рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐
API
рдирд╛рдордХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдПрдХ рд╕рдореВрд╣ рд╣реИред рд╡рд╣рд╛рдВ рд╣рдо рдРрд╕реА рдХрдХреНрд╖рд╛рдПрдВ рдЬреЛрдбрд╝реЗрдВрдЧреЗ рдЬреЛ рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рд╕реЗрд╡рд╛рдПрдВ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИрдВред рдЗрд╕ рд╕рдореВрд╣ рдореЗрдВ,
iOS рдЯреЗрдореНрдкрд▓реЗрдЯ
> рдХреЛрдХреЛ рдЯрдЪ> рдСрдмреНрдЬреЗрдХреНрдЯрд┐рд╡-рд╕реА рдХреНрд▓рд╛рд╕ ,
NSObject
рдХрд╛ рдПрдХ рдЙрдкрд╡рд░реНрдЧ, рдФрд░ рдЗрд╕реЗ
LibraryAPI
рдирд╛рдо рд╕реЗ рдПрдХ рд╡рд░реНрдЧ
LibraryAPI
ред
LibraryAPI.h рдЦреЛрд▓реЗрдВ рдФрд░ рдЗрд╕рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЗ рд╕рд╛рде рдмрджрд▓реЗрдВ:
@interface LibraryAPI : NSObject + (LibraryAPI *)sharedInstance; @end
LibraryAPI.m рдкрд░ рдЬрд╛рдПрдБ рдФрд░
@implentation
рд▓рд╛рдЗрди рдХреЗ рдмрд╛рдж рдирд┐рдореНрди рд╡рд┐рдзрд┐ рдЪрд┐рдкрдХрд╛рдПрдБ:
+ (LibraryAPI *)sharedInstance {
рдЗрд╕ рдЫреЛрдЯреА рд╕реА рд╡рд┐рдзрд┐ рдореЗрдВ рдмрд╣реБрдд рд╕реА рд░реЛрдЪрдХ рдмрд╛рддреЗрдВ рд╣реЛрддреА рд╣реИрдВ:
- рд╣рдо рдкреЙрдЗрдВрдЯрд░ рдХреЛ рдХрдХреНрд╖рд╛ рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдерд┐рд░ рдЪрд░ рдШреЛрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ (рдЗрд╕рдХрд╛ рдореВрд▓реНрдп рд╣рдорд╛рд░реА рдХрдХреНрд╖рд╛ рд╕реЗ рд╡рд┐рд╢реНрд╡ рд╕реНрддрд░ рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧрд╛)ред
- рд╣рдо рдПрдХ рд╕реНрдерд┐рд░ рд╡реИрд░рд┐рдПрдмрд▓ рдбрд┐рд╕реНрдкреИрдЪ_рдСрдирд╕реЗ_рдЯреА рдШреЛрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдЧрд╛ рдХрд┐ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЛрдб рдХреЛ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
- рдЧреНрд░реИрдВрдб рд╕реЗрдВрдЯреНрд░рд▓ рдбрд┐рд╕реНрдкреИрдЪ (рдЬреАрд╕реАрдбреА) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо
LibraryAPI
рдЙрджрд╛рд╣рд░рдг рдХреЛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдЕрдХреЗрд▓реЗ рдкреИрдЯрд░реНрди рдХрд╛ рд╕рд╛рд░ рд╣реИ: рдЖрд░рдВрднреАрдХрд░рдг рдмреНрд▓реЙрдХ рдХреЛ рдлрд┐рд░ рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЬрдм
sharedInstance()
рдлрд┐рд░ рд╕реЗ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ
sharedInstance()
рдмреНрд▓реЙрдХ рдХреЗ рдЕрдВрджрд░ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ (рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкрд╣рд▓реЗ рд╣реА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛ рдЪреБрдХрд╛ рд╣реИ), рдФрд░ рдЖрдкрдХреЛ рдкрд┐рдЫрд▓реЗ рдмрдирд╛рдП
LibraryAPI
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдХреЗрддрдХ рдорд┐рд▓реЗрдЧрд╛ред
рдиреЛрдЯред рдЬреАрд╕реАрдбреА рдФрд░ рдЗрд╕рдХреЗ рдЖрд╡реЗрджрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП, рд▓реЗрдЦ рдХреЗ рд▓реЗрдЦрдХ рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ:
рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ рдФрд░ рдЧреНрд░реИрдВрдб рд╕реЗрдВрдЯреНрд░рд▓ рдбрд┐рд╕реНрдкреИрдЪ рдФрд░
рдХреИрд╕реЗ рдмреНрд▓реЙрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ ред
рдЗрд╕рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрд▓реНрдмрдо рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рд╢реБрд░реБрдЖрддреА рдмрд┐рдВрджреБ, рд╕рд┐рдВрдЧрд▓рдЯрди рд╣реИред рдЪрд▓реЛ рдЕрдЧрд▓рд╛ рдХрджрдо рдЙрдард╛рддреЗ рд╣реИрдВ: рд╣рдорд╛рд░реЗ рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд░реНрдЧ рдмрдирд╛рдПрдВред
API
рд╕рдореВрд╣ рдореЗрдВ, рдПрдХ рдирдпрд╛ рд╡рд░реНрдЧ рдмрдирд╛рдПрдВ:
iOS> рдХреЛрдХреЛ рдЯрдЪ> рдСрдмреНрдЬреЗрдХреНрдЯрд┐рд╡-рд╕реА рдХреНрд▓рд╛рд╕ ,
NSObject
рдХрд╛ рдПрдХ рдЙрдкрд╡рд░реНрдЧ, рдФрд░ рдЗрд╕реЗ
PersistencyManager
рдХрд╣рддреЗ рд╣реИрдВред
PersistencyManager.h рдЦреЛрд▓реЗрдВ рдФрд░ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдПрдХ рдкрдВрдХреНрддрд┐ рдЬреЛрдбрд╝реЗрдВ:
#import "Album.h"
рдЕрдЧрд▓рд╛,
@interface
рдХреЗ рдмрд╛рдж рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ:
- (NSArray *)albums; - (void)addAlbum:(Album *)album atIndex:(NSUInteger)index; - (void)deleteAlbumAtIndex:(NSUInteger)index;
рдпреЗ рддреАрди рддрд░реАрдХреЛрдВ рдХреЗ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╣реИрдВ рдЬреЛ рдПрд▓реНрдмрдо рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВрдЧреЗред
PersistencyManager.m рдЦреЛрд▓реЗрдВ рдФрд░
@implementation
рд▓рд╛рдЗрди рд╕реЗ рдареАрдХ рдкрд╣рд▓реЗ рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ:
@interface PersistencyManager () { NSMutableArray * albums;
рдпрд╣ рд╡рд░реНрдЧ рд╡рд┐рд╕реНрддрд╛рд░ рдПрдХ рд╡рд░реНрдЧ рдореЗрдВ рдирд┐рдЬреА рддрд░реАрдХреЛрдВ рдФрд░ рдЪрд░ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рд╣реИ рддрд╛рдХрд┐ рдмрд╛рд╣рд░реА рд╡рд░реНрдЧреЛрдВ рдХреЛ рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рди рдЪрд▓реЗред рдпрд╣рд╛рдВ рд╣рдо рдПрдХ рдРрд░реЗ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдПрд▓реНрдмрдо рдбреЗрдЯрд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рд╕рд░рдгреА рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдПрд▓реНрдмрдореЛрдВ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдЬреЛрдбрд╝ рдФрд░ рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред
рдЕрдм
@implementation
рд▓рд╛рдЗрди рдХреЗ рдмрд╛рдж
PersistencyManager
рд╡рд░реНрдЧ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдЬреЛрдбрд╝реЗрдВ:
- (id)init { self = [super init]; if (self) { albums = [NSMutableArray arrayWithArray: @[[[Album alloc] initWithTitle:@"Best of Bowie" artist:@"David Bowie" coverUrl:@"https://s3.amazonaws.com/CoverProject/album/album_david_bowie_best_of_bowie.png" year:@"1992"], [[Album alloc] initWithTitle:@"It's My Life" artist:@"No Doubt" coverUrl:@"https://s3.amazonaws.com/CoverProject/album/album_no_doubt_its_my_life_bathwater.png" year:@"2003"], [[Album alloc] initWithTitle:@"Nothing Like The Sun" artist:@"Sting" coverUrl:@"https://s3.amazonaws.com/CoverProject/album/album_sting_nothing_like_the_sun.png" year:@"1999"], [[Album alloc] initWithTitle:@"Staring at the Sun" artist:@"U2" coverUrl:@"https://s3.amazonaws.com/CoverProject/album/album_u2_staring_at_the_sun.png" year:@"2000"], [[Album alloc] initWithTitle:@"American Pie" artist:@"Madonna" coverUrl:@"https://s3.amazonaws.com/CoverProject/album/album_madonna_american_pie.png" year:@"2000"]]]; } return self; }
init
рдкрджреНрдзрддрд┐ рдореЗрдВ, рд╣рдо рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдкрд╛рдБрдЪ рдПрд▓реНрдмрдореЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рдПрдХрддреНрд░ рдХрд░рддреЗ рд╣реИрдВ (рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдЕрдкрдиреЗ рдкрд╕рдВрджреАрджрд╛ рд╕рдВрдЧреАрдд рд╕реЗ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ)ред
рдЕрдм
PersistencyManager.m рдХреЗ рд▓рд┐рдП рддреАрди рддрд░реАрдХреЗ рдЬреЛрдбрд╝реЗрдВ:
- (NSArray *)albums { return albums; } - (void)addAlbum:(Album *)album atIndex:(NSUInteger)index { if (albums.count >= index) [albums insertObject:album atIndex:index]; else [albums addObject:album]; } - (void)deleteAlbumAtIndex:(NSUInteger)index { [albums removeObjectAtIndex:index]; }
рдЗрди рд╕рд░рд▓ рддрд░реАрдХреЛрдВ рд╕реЗ рдЖрдк рдПрд▓реНрдмрдореЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ ()B) рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХреЗрд╡рд▓ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░реЗрдВ рдХрд┐ рдпрд╣ рд╕рдВрдХрд▓рди рдХрд░рддрд╛ рд╣реИред
рдЖрдк рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ:
PersistencyManager
рд╕рд┐рдВрдЧрд▓рдЯрди рдЕрдзреНрдпрд╛рдп рдореЗрдВ рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ?
LibraryAPI
рдФрд░
PersistencyManager
рдмреАрдЪ рдХреЗ рд░рд┐рд╢реНрддреЗ рдХреЛ рдЕрдЧрд▓реЗ рдЕрдзреНрдпрд╛рдп рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдореБрдЦреМрдЯрд╛

рдореБрдЦреМрдЯрд╛ рдкреИрдЯрд░реНрди рдПрдХ рдЬрдЯрд┐рд▓ рдЙрдкрддрдВрддреНрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдВрддрд░рдлрд▓рдХ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рд╡рд┐рднрд┐рдиреНрди рдЗрдВрдЯрд░рдлреЗрд╕ рд╡рд╛рд▓реЗ рдХрдИ рд╡рд░реНрдЧреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЭрдЯрдХрд╛ рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдПрдкреАрдЖрдИ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ:

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

рдпрджрд┐ рдЖрдкрдХреЗ рдмреИрдХрдПрдВрдб рдХреЛ рдмрджрд▓рдиреЗ рдХрд╛ рд╕рдордп рдЖрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЛрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рдирд╣реАрдВ рдкрдбрд╝реЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдПрдкреАрдЖрдИ рдирд╣реАрдВ рдмрджрд▓реЗрдЧрд╛ред
рдореБрдЦреМрдЯрд╛ рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдиреЗрдЯрд╡рд░реНрдХ рд╕рдВрдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рдиреАрдп рдбреЗрдЯрд╛ рднрдВрдбрд╛рд░рдг рдФрд░
HTTPClient
рд▓рд┐рдП
PersistencyManager
ред
рдЖрдкрдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рдЕрдиреНрдп рд╡рд░реНрдЧреЛрдВ рдХреЛ рдЗрди рджреЛ рдЪреАрдЬреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╕реЛрдЪрдирд╛ рдЪрд╛рд╣рд┐рдПредрдЗрд╕ рдкреИрдЯрд░реНрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреЗрд╡рд▓ рдПрдХ рд╡рд░реНрдЧ - LibraryAPI
- рдХреЛ рд╕рдВрджрд░реНрдн рдЙрджрд╛рд╣рд░рдг PersistencyManager
рдФрд░ рдЪрд╛рд╣рд┐рдП HTTPClient
ред LibraryAPI
- рдпрд╣ рд╡рд╣ рдкрд╣рд▓реВ рд╣реИ рдЬреЛ рд╕реЗрд╡рд╛рдУрдВ (рд╕реНрдЯреЛрд░реЗрдЬ рдФрд░ рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░) рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИредрдиреЛрдЯред рдЖрдорддреМрд░ рдкрд░, рдПрдХ рдПрдХрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд┐рд╕реА рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди рдореМрдЬреВрдж рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдПрдХ рд╕рд┐рдВрдЧрд▓рдЯрди рдХреЛ рдХрдИ "рдордЬрдмреВрдд" рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХреЛ рдЕрдиреНрдп рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдП, рдХреНрдпреЛрдВрдХрд┐ рдЬрдм рддрдХ рдЖрд╡реЗрджрди рдмрдВрдж рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдЙрдиреНрд╣реЗрдВ рдореБрдХреНрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛редрдПрдХ рдордЬрдмреВрдд рд╕реВрдЪрдХ рдХреНрдпрд╛ рд╣реИ?рд╕реНрдЯреИрдХ рдУрд╡рд░рдлреНрд▓реЛ рдкрд░ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдЬрд╡рд╛рдм рдорд┐рд▓рд╛ :рдХрдЪрд░рд╛ рдХрд▓реЗрдХреНрдЯрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдореЗрдореЛрд░реА рд╕реЗ рдореБрдХреНрдд рдХрд░ рджреЗрдЧрд╛ рдЬреИрд╕реЗ рд╣реА рдЗрд╕рдореЗрдВ рдХреЛрдИ "рдордЬрдмреВрдд" рдкреЙрдЗрдВрдЯрд░реНрд╕ рдирд╣реАрдВ рд╣реИрдВред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рдПрдХ "рдХрдордЬреЛрд░" рд╕реВрдЪрдХ рд╣реИ - рдЬреИрд╕реЗ рд╣реА рдЕрдВрддрд┐рдо рдордЬрдмреВрдд рд▓рд┐рдВрдХ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдореЗрдореЛрд░реА рд╕реЗ рдореБрдХреНрдд рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд╢реЗрд╖ "рдХрдордЬреЛрд░" рд▓рд┐рдВрдХ рд░реАрд╕реЗрдЯ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВредрдЙрджрд╛рд╣рд░рдг, тАФ . ┬л┬╗ ( ).

тАФ . , . 5 5 (5 1 ) тАФ , 5 .
тАФ , : ┬л , !┬╗ , (┬л ┬╗) . , , , .
рдпрд╣ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдпреЛрдЬрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ
LibraryAPI
рдмрд╛рд╣рд░ рдХреЛрдб рдХреЗ рд▓рд┐рдП рдЦреБрд▓рд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдЦрд╛рд▓ рд╡рд░реНрдЧ рдХреА рдЬрдЯрд┐рд▓рддрд╛ HTTPClient
рдФрд░ PersistencyManager
рдЖрд╡реЗрджрди рдХреЗ рдмрд╛рдХреАред LibraryAPI.hрдЦреЛрд▓реЗрдВ рдФрд░ рдлрд╝рд╛рдЗрд▓ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдирд┐рд░реНрджреЗрд╢ рдЬреЛрдбрд╝реЗрдВ: #import "Album.h"
рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рд╡рд┐рдзрд┐ рдШреЛрд╖рдгрд╛рдПрдБ рдЬреЛрдбрд╝реЗрдВ: - (NSArray *)albums; - (void)addAlbum:(Album *)album atIndex:(int)index; - (void)deleteAlbumAtIndex:(int)index;
рдпрд╣рд╛рдБ рд╡реЗ рд╡рд┐рдзрд┐рдпрд╛рдБ рд╣реИрдВ рдЬреЛ рдЕрдиреНрдп рд╡рд░реНрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЦреБрд▓реА рд╣реЛрдВрдЧреАред LibraryAPI.m рдкрд░рдЬрд╛рдПрдВ рдФрд░ рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ: #import "PersistencyManager.h" #import "HTTPClient.h"
рдпрд╣ рдПрдХрдорд╛рддреНрд░ рд╕реНрдерд╛рди рд╣реИ рдЬреЛ рд╣рдо рдЗрди рд╡рд░реНрдЧреЛрдВ рдХреЛ рдЖрдпрд╛рдд рдХрд░рддреЗ рд╣реИрдВ! рдЖрдкрдХрд╛ API рдЖрдкрдХреЗ "рдХреЙрдореНрдкреНрд▓реЗрдХреНрд╕" рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдПрдХрдорд╛рддреНрд░ рдПрдХреНрд╕реЗрд╕ рдкреЙрдЗрдВрдЯ рд╣реЛрдЧрд╛редрдЕрдм рдХреНрд▓рд╛рд╕ рдПрдХреНрд╕рдЯреЗрдВрд╢рди (рд▓рд╛рдЗрди рдХреЗ рдКрдкрд░ @implementation
) рдореЗрдВ рддреАрди рдирд┐рдЬреА рдЪрд░ рдЬреЛрдбрд╝реЗрдВ : @interface LibraryAPI () { PersistencyManager * persistencyManager; HTTPClient * httpClient; BOOL isOnline; } @end
рд╕реНрд╡рд┐рдЪ isOnline
рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ: рдХреНрдпрд╛ рдПрд▓реНрдмрдо (рдРрдб, рдбрд┐рд▓реАрдЯ) рд╕реЗ рдЬреБрдбрд╝реЗ рдмрджрд▓рд╛рд╡ рд╕рд░реНрд╡рд░ рдкрд░ рдЬрд╛рдиреЗ рдЪрд╛рд╣рд┐рдП?рд╣рдо рдЗрди рдЪрд░реЛрдВ рдХреЛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред LibraryAPI.m рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ : - (id)init { self = [super init]; if (self) { persistencyManager = [[PersistencyManager alloc] init]; httpClient = [[HTTPClient alloc] init]; isOnline = NO; } return self; }
рдиреЛрдЯ: HTTP рдХреНрд▓рд╛рдЗрдВрдЯ рдЕрд╕рд▓реА рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдпрд╣ рдХреЗрд╡рд▓ "рдореБрдЦреМрдЯрд╛" рдкреИрдЯрд░реНрди рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рдореМрдЬреВрдж рд╣реИред isOnline
рд╣рдореЗрд╢рд╛ рд░рд╣реЗрдЧрд╛ NO
редрдлрд┐рд░ рд╡рд░реНрдЧ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рддреАрди рд╡рд┐рдзрд┐рдпрд╛рдБ рдЬреЛрдбрд╝реЗрдВ LibraryAPI
: - (NSArray *)albums { return [persistencyManager albums]; } - (void)addAlbum:(Album *)album atIndex:(int)index { [persistencyManager addAlbum:album atIndex:index]; if (isOnline) { [httpClient postRequest:@"/api/addAlbum" body:[album description]]; } } - (void)deleteAlbumAtIndex:(int)index { [persistencyManager deleteAlbumAtIndex:index]; if (isOnline) { [httpClient postRequest:@"/api/deleteAlbum" body:[@(index) description]]; } }
рд╡рд┐рдзрд┐ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ addAlbum:atIndex:
ред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рдбреЗрдЯрд╛ рдХреЛ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░, рдпрджрд┐ рдЗрдВрдЯрд░рдиреЗрдЯ рдХрдиреЗрдХреНрд╢рди рд╣реИ, рддреЛ рдпрд╣ рд░рд┐рдореЛрдЯ рд╕рд░реНрд╡рд░ рдкрд░ рдбреЗрдЯрд╛ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдореБрдЦреМрдЯрд╛ рдХрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд▓рд╛рдн рд╣реИ: рдЬрдм рд╕реМрд░ рдордВрдбрд▓ рдХреЗ рдмрд╛рд╣рд░ рдПрдХ рд╡рд░реНрдЧ рдПрдХ рдирдпрд╛ рдПрд▓реНрдмрдо рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ - рдФрд░ рдкрддрд╛ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП - рдЬреЛ рдЕрдВрджрд░ рдЫрд┐рдкрд╛ рд╣реИ рдЙрд╕рдХреА рдЬрдЯрд┐рд▓рддрд╛редрдиреЛрдЯ: "рдореБрдЦреМрдЯрд╛" рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдХреБрдЫ рднреА рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рд╕реАрдзреЗ "рдЫрд┐рдкреЗ рд╣реБрдП" рд╡рд░реНрдЧреЛрдВ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИред "рдореВрд░реНрдЦ рд╕реЗ рд░рдХреНрд╖рд╛" рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд░рд┐рдпрд╛рдУрдВ рдкрд░ рдХрдВрдЬреВрд╕реА рди рдХрд░реЗрдВ рдпрд╛ рдмрд╕ рдпрд╣ рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рд╣рд░ рдХреЛрдИ рдЖрдкрдХреЗ рдирд┐рдпрдореЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдирд╣реАрдВ рдЦреЗрд▓реЗрдЧрд╛редрдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдПрдВ рдФрд░ рдЪрд▓рд╛рдПрдВред рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рд▓реА рд╕реНрдХреНрд░реАрди:
iOS 6 рдкрд░, рд╣рдо рдШрдбрд╝реА рдХреЗ рд╕рд╛рде рдПрдХ рд╕реНрдЯреЗрдЯрд╕ рдмрд╛рд░ рджреЗрдЦреЗрдВрдЧреЗред IOS 7 рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрд╕рд╕реЗ рд╡рдВрдЪрд┐рдд рд╣реИрдВред рдкрд╛рда рдФрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреНрд░рддреАрдХ рдХрд╛рд▓реЗ рд╣реИрдВредрд╣рдореЗрдВ рдПрд▓реНрдмрдо рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЪрд╛рд╣рд┐рдПред рдЕрдЧрд▓реЗ рдкреИрдЯрд░реНрди рдкрд░ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХрд╛ рдПрдХ рд╢рд╛рдирджрд╛рд░ рдЕрд╡рд╕рд░ ...рдбреЗрдХреЛрд░реЗрдЯрд░
рд╕реНрдорд╛рд░реНрдЯ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдбреЗрдХреЛрд░реЗрдЯрд░ рдкреИрдЯрд░реНрди рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдЕрдкрдиреЗ рдХреЛрдб рдХреЛ рдмрджрд▓реЗ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рд╡реНрдпрд╡рд╣рд╛рд░ рдФрд░ рдЬрд┐рдореНрдореЗрджрд╛рд░рд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдпрд╣ рдЗрдирд╣реЗрд░рд┐рдЯреЗрдВрд╕ рдХрд╛ рдПрдХ рд╡рд┐рдХрд▓реНрдк рд╣реИ (рдЗрдирд╣реЗрд░рд┐рдЯреЗрдВрд╕ рдХреЗ рджреМрд░рд╛рди, рдЖрдк рдХреНрд▓рд╛рд╕ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдПрдХ рдЙрдкрд╡рд░реНрдЧ рдореЗрдВ рд▓рдкреЗрдЯрдХрд░ рдмрджрд▓ рджреЗрддреЗ рд╣реИрдВ)редрдСрдмреНрдЬреЗрдХреНрдЯрд┐рд╡-рд╕реА рдореЗрдВ рдЗрд╕ рдкреИрдЯрд░реНрди рдХреЗ рджреЛ рдмрд╣реБрдд рд╣реА рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИрдВ: рд╢реНрд░реЗрдгрд┐рдпрд╛рдВ рдФрд░ рдкреНрд░рддрд┐рдирд┐рдзрд┐рдордВрдбрд▓редрд╢реНрд░реЗрдгреА
"рд╢реНрд░реЗрдгреА" рдПрдХ рдмрд╣реБрдд рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рддрдВрддреНрд░ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рд╡рд┐рд░рд╛рд╕рдд рдХреЗ рдмрд┐рдирд╛ рдореМрдЬреВрджрд╛ рд╡рд░реНрдЧреЛрдВ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдирдП рддрд░реАрдХреЛрдВ рдХреЛ рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╕рд╛рдзрд╛рд░рдг рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрдХреНрд╖рд╛ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ "рдбреЗрдХреЛрд░реЗрдЯрд░" рдХреА рдХреНрд▓рд╛рд╕рд┐рдХ рдкрд░рд┐рднрд╛рд╖рд╛ рд╕реЗ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдПрдХ "рд╢реНрд░реЗрдгреА" рдореЗрдВ рдЙрд╕ рд╡рд░реНрдЧ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдЗрд╕реЗ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИредрдиреЛрдЯ: рдЕрдкрдиреА рдЦреБрдж рдХреА рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк рдХрд┐рд╕реА рднреА рдХреЛрдХреЛ рд╡рд░реНрдЧ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рднреА рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ!рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ
рд╕реНрдерд┐рддрд┐ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ: рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИ Album
рдЬрд┐рд╕реЗ рд╣рдо рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ:
рдПрд▓реНрдмрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдХрд╣рд╛рдВ рд╕реЗ рдЖрддреА рд╣реИ? Album
- рдпрд╣ рдСрдмреНрдЬреЗрдХреНрдЯ "рдореЙрдбрд▓" рд╣реИ, рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рд╣рдо рдХрд┐рд╕ рд░реВрдк рдореЗрдВ рдбреЗрдЯрд╛ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВред рд╣рдореЗрдВ Album
рдХреЛрдб рдХреЛ Album
рд╕реНрдкрд░реНрд╢ рдХрд┐рдП рдмрд┐рдирд╛ рд╡рд░реНрдЧ рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдмрд╛рд╣рд░реА (рд╕рдореНрдорд╛рди рдХреЗ рд╕рд╛рде ) рдХреЛрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ Album
редрд╣рдо рдПрдХ рд╢реНрд░реЗрдгреА рдмрдирд╛рдПрдВрдЧреЗ - рд╡рд░реНрдЧ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ Album
ред рд╢реНрд░реЗрдгреА рдХреЗ рддрд░реАрдХреЗ рдПрдХ рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рд▓реМрдЯрд╛рдПрдВрдЧреЗ UITableView
редрдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧреА: рдПрд▓реНрдмрдо
рд╡рд░реНрдЧ рдореЗрдВ рдПрдХ рд╢реНрд░реЗрдгреА рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрджреНрджреЗрд╢реНрдп-рд╕реА рд╢реНрд░реЗрдгреА рдХреЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдПрдХ рдирдИ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдВ (рдЖрджрдд рд╕реЗ рд╕реА-рдХреНрд▓рд╛рд╕ рдХрд╛ рдЪрдпрди рди рдХрд░реЗрдВ!)рдлрд╝реАрд▓реНрдб рднрд░реЗрдВ:рд╢реНрд░реЗрдгреА : TableRepresentation
рд╢реНрд░реЗрдгреА : Album
рдХреНрдпрд╛ рдЖрдкрдиреЗ рдПрдХ рдирдпрд╛ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдиреЛрдЯрд┐рд╕ рдХрд┐рдпрд╛ рд╣реИ? Album+TableRepresentation
рд╣рдо рдХрдХреНрд╖рд╛ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ Album
ред рдЗрд╕ рд╕рдореНрдореЗрд▓рди рдХрд╛ рдкрд╛рд▓рди рдХрд░рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкрдврд╝рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ рджреЗрддрд╛ рд╣реИ рдФрд░ рдЕрдиреНрдп рд╢реНрд░реЗрдгрд┐рдпреЛрдВ (рдЬреЛ рдЖрдк рдпрд╛ рдХреЛрдИ рдФрд░ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИ) рдХреЗ рд╕рд╛рде рд╕рдВрднрд╛рд╡рд┐рдд рдореИрдЪреЛрдВ рдХреЛ рд░реЛрдХрддрд╛ рд╣реИред рдПрд▓реНрдмрдо + TableRepresentation.h рдкрд░рдЬрд╛рдПрдВ рдФрд░ рдПрдХ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рддрд░реАрдХрд╛ рдЬреЛрдбрд╝реЗрдВ: - (NSDictionary *)tr_tableRepresentation;
рд╡рд┐рдзрд┐ рдирд╛рдо рдЙрдкрд╕рд░реНрдЧ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ: tr_
- рд╢реНрд░реЗрдгреА рдирд╛рдо рдХреЗ рд▓рд┐рдП рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдирд╛рдо ( TableRepresentation
)ред рдпрд╣ рдПрдХ рдФрд░ рдирд┐рдпрдо рд╣реИ рдЬреЛ рд╣рдореЗрдВ рдЕрдиреНрдп рддрд░реАрдХреЛрдВ рдХреЗ рдирд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рдЕрддрд┐рд╡реНрдпрд╛рдкреАрддрд╛ рдХреЛ рд░реЛрдХрдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛редрдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕реВрдЪрдирд╛ред рдпрджрд┐ рд╢реНрд░реЗрдгреА рдореЗрдВ рдШреЛрд╖рд┐рдд рд╡рд┐рдзрд┐ рдХрд╛ рдирд╛рдо рд╕реНрд░реЛрдд рд╡рд░реНрдЧ рдХреА рд╡рд┐рдзрд┐ рдХреЗ рдирд╛рдо рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ (рдпрд╛ рдЗрд╕ рд╡рд░реНрдЧ рдХреА рдЕрдиреНрдп рд╢реНрд░реЗрдгреА рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЙрд╕рдХреЗ рд╕реБрдкрд░рдХреНрд▓рд╛рд╕ рдХреА рд╡рд┐рдзрд┐ рдХрд╛ рдирд╛рдо) - рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╡реНрдпрд╡рд╣рд╛рд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рд╣реИ ред рд╡рд╣рд╛рдВ рддреБрдо рдЬрд╛рдУред
рдпрд╣ рдЬреНрдЮрд╛рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреМрди рд╕реА рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрджрд┐ рдЖрдк рдЕрдкрдиреА рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рдЖрдк рдорд╛рдирдХ рдХреЛрдХреЛ рдпрд╛ рдХреЛрдХреЛ рдЯрдЪ рд╡рд░реНрдЧреЛрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ ред рдПрд▓реНрдмрдо + TableRepresentation.m рдкрд░рдЬрд╛рдПрдВ рдФрд░ рдирд┐рдореНрди рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝реЗрдВ: - (NSDictionary *)tr_tableRepresentation { return @{@"titles":@[@"", @"", @"", @""], @"values":@[self.artist, self.title, self.genre, self.year]}; }
рдЬрд░рд╛ рд╕реЛрдЪреЛ рдХрд┐ рдкреИрдЯрд░реНрди рдХрд┐рддрдирд╛ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╣реИ:- рд╣рдо рд╕реАрдзреЗ рд╕реЗ рдЧреБрдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ
Album
ред - рд╣рдордиреЗ
Album
рд╡рд┐рд░рд╛рд╕рдд рдХреЗ рдмрд┐рдирд╛ рд╡рд░реНрдЧ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд┐рдпрд╛ рд╣реИ ред (рдпрджрд┐ рдЖрдк рдПрд▓реНрдмрдо рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред) - рдпрд╣ рд╕рд░рд▓ рдРрдб-рдСрди рд╣рдореЗрдВ рдХреЛрдб рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ рдПрдХ
UITableView
рдЕрдЪреНрдЫрд╛ рджреГрд╢реНрдп рд░рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ Album
рд╣реИ Album
ред
Apple рдлрд╛рдЙрдВрдбреЗрд╢рди рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдХрд╛ рднрд╛рд░реА рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╡реЗ рдРрд╕рд╛ рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВ, рдЖрдк NSString.h рдЦреЛрд▓ рд╕рдХрддреЗ рд╣реИрдВ ред рдкрддрд╛ рд▓рдЧрд╛рдПрдВ @interface NSString
- рд╡рд╣рд╛рдБ рдЖрдк рддреАрди рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╡рд░реНрдЧ рдШреЛрд╖рдгрд╛ рджреЗрдЦреЗрдВрдЧреЗ: NSStringExtensionMethods
, NSExtendedStringPropertyListParsing
, NSStringDeprecated
ред рд╢реНрд░реЗрдгрд┐рдпрд╛рдБ рдЖрдкрдХреЛ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ, рдЙрдиреНрд╣реЗрдВ рдЕрдиреБрднрд╛рдЧреЛрдВ рдореЗрдВ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИрдВредрдкреНрд░рддрд┐рдирд┐рдзрд┐рдордВрдбрд▓
рдбреЗрдХреЛрд░реЗрдЯрд░ рдкреИрдЯрд░реНрди рдХрд╛ рдПрдХ рдФрд░ рд░реВрдк рдкреНрд░рддрд┐рдирд┐рдзрд┐рдордВрдбрд▓ рд╣реИред рдПрдХ рддрдВрддреНрд░ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рд╡рд╕реНрддреБ рдХрд┐рд╕реА рдЕрдиреНрдп рд╡рд╕реНрддреБ (рдпрд╛ рдЗрд╕рдХреЗ рд╕рд╛рде рд╕рдордиреНрд╡рдп рдореЗрдВ) рдХреА рдУрд░ рд╕реЗ рдмрд╛рддрдЪреАрдд рдХрд░рддреА рд╣реИред рдпрд╣ рдмрд╣реБрдд рд╕рдорд╛рди рд╣реИ рдХрд┐ рдиреЗрддрд╛ рдЕрдзреАрдирд╕реНрдереЛрдВ рдХреЛ рдЕрдзрд┐рдХрд╛рд░ рдХреИрд╕реЗ рд╕реМрдВрдкрддрд╛ рд╣реИредрдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ: UITableView
рдЙрди рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрд╣ рд╣реИ tableView:numberOfRowsInSection:
(рддрд╛рд▓рд┐рдХрд╛ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛)редрд╣рдореЗрдВ рдЙрдореНрдореАрдж рдирд╣реАрдВ рд╣реИ рдХрд┐ UITableView
рд╡рд╣ рдЦреБрдж рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдХрд┐рддрдиреА рдкрдВрдХреНрддрд┐рдпрд╛рдБ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдВрдЦреНрдпрд╛ рдЖрд╡реЗрджрди рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдпрд╣ UITableView
"рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рд▓рд╛рдЗрдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ" рдХреЗ рдХрд╛рд░реНрдп рдХреЛ рдЕрдкрдиреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЛ рд╕реМрдВрдкрддрд╛ рд╣реИред рдпрд╣ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рджреЗрддрд╛ рд╣реИ: рд╡рд░реНрдЧ рд╕реНрд╡рдпрдВ UITableView
рдкреНрд░рджрд░реНрд╢рд┐рдд рдбреЗрдЯрд╛ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд╣реЛрддрд╛ рд╣реИредрдпрд╣рд╛рдВ рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдЖрдк рдПрдХ рдирдпрд╛ рдмрдирд╛рддреЗ рд╣реИрдВ UITableView
:
рдСрдмреНрдЬреЗрдХреНрдЯUITableView
рдПрдХ рдореЗрдЬ рджрд┐рдЦрд╛рдХрд░ рдЕрдкрдирд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрд╕реЗ рдХреБрдЫ рдЬрд╛рдирдХрд╛рд░реА рдЪрд╛рд╣рд┐рдП рдЬреЛ рдЙрд╕рдХреЗ рдкрд╛рд╕ рдирд╣реАрдВ рд╣реИред рд╡рд╣ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐ (рдпрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рдпреЛрдВ) рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рддрд╛ рд╣реИред рд╡реИрд╕реЗ, рдПрдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╡рд░реНрдЧ рдЕрдирд┐рд╡рд╛рд░реНрдп рдФрд░ рд╡реИрдХрд▓реНрдкрд┐рдХ рддрд░реАрдХреЛрдВ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ (рд╣рдо рдЗрд╕ рдкрд╛рда рдореЗрдВ рдмрд╛рдж рдореЗрдВ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдиреЗрдВрдЧреЗ)редрд╡рд╕реНрддреБ рд╕реЗ рд╡рд╛рд░рд┐рд╕ рдХрд░рдирд╛ рдФрд░ рдЖрд╡рд╢реНрдпрдХ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдирд╛ рдЖрд╕рд╛рди рдкреНрд░рддреАрдд рд╣реЛрдЧрд╛? рд▓реЗрдХрд┐рди рдПрдХ рдмрд┐рдВрджреБ рд╣реИ: рдЖрдк рдХреЗрд╡рд▓ рдПрдХ рд╡рд░реНрдЧ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓ рд╕рдХрддреЗ рд╣реИрдВред рдСрдмреНрдЬреЗрдХреНрдЯрд┐рд╡-рд╕реА рдорд▓реНрдЯреАрдкрд▓ рдЗрдирд╣реЗрд░рд┐рдЯреЗрдВрд╕ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдПрдХ рд╡рд╕реНрддреБ рдХреЛ рджреЛ (рдпрд╛ рдЕрдзрд┐рдХ) рдЕрдиреНрдп рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╡рд┐рд░рд╛рд╕рдд рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИредрдиреЛрдЯ: рдпрд╣ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреИрдЯрд░реНрди рд╣реИред рдПрдкреНрдкрд▓ UIKit рдХреЗ рд╕рдмрд╕реЗ рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ: UITableView
, UITextView
, UITextField
,UIWebView
, UIAlert
, UIActionSheet
, UICollectionView
, UIPickerView
, UIGestureRecognizer
, UIScrollView
, ... рдареАрдХ рд╣реИ, рдореИрдВ рдЬрд╛рд░реА рдирд╣реАрдВ рд╣реЛрдВрдЧреЗредрдкреНрд░рддрд┐рдирд┐рдзрд┐рдордВрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ
ViewController.m рдЦреЛрд▓реЗрдВ рдФрд░ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдХреБрдЫ рдФрд░ "рдЖрдпрд╛рдд" рдЬреЛрдбрд╝реЗрдВ: #import "LibraryAPI.h" #import "Album+TableRepresentation.h"
рд╡рд░реНрдЧ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рдмреАрдЪ рдЪрд╛рд░ рдирд┐рдЬреА рдЪрд░ рдЬреЛрдбрд╝реЗрдВ, @interface
рдФрд░ @end
: @interface ViewController () { UITableView * dataTable; NSArray * allAlbums; NSDictionary * currentAlbumData; int currentAlbumIndex; } @end
рдФрд░ рдпрд╣рд╛рдВ - рд╣рдореЗрдВ рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рд╡рд░реНрдЧ рдПрдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рд╣реИред рдХреЛрдг рдХреЛрд╖реНрдардХ рдореЗрдВ рдХреБрдЫ рдирд╛рдореЛрдВ рдХреЛ рдЬреЛрдбрд╝реЗрдВ: @interface ViewController () <UITableViewDataSource, UITableViewDelegate>
UITableViewDataSource
, UITableViewDelegate
рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдирд╛рдо рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рдкреБрд╖реНрдЯрд┐ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдЗрди рджреЛ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдЧрд╛ред рдпрд╣ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХрд╛ рдПрдХ "рд╡рд╛рджрд╛" рд╣реИредрдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, UITableView
рдореБрдЭреЗ рдкреВрд░рд╛ рдпрдХреАрди рд╣реИ рдХрд┐ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдЖрд╡рд╢реНрдпрдХ рддрд░реАрдХреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИредрдЕрдЧрд▓рд╛, рд╡рд┐рдзрд┐ viewDidLoad
рдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рд╕реЗ рдмрджрд▓реЗрдВ : - (void)viewDidLoad { [super viewDidLoad];
рдЗрд╕ рд╡рд┐рдзрд┐ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:- рдкреГрд╖реНрдарднреВрдорд┐ рдХрд╛ рд░рдВрдЧ рдЧрд╣рд░реЗ рдиреАрд▓реЗ рд░рдВрдЧ рдореЗрдВ рд╕реЗрдЯ рдХрд░реЗрдВред
- рдПрдкреАрдЖрдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рднреА рдПрд▓реНрдмрдореЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред рд╣рдореЗрдВ
PersistencyManager
рд╕реАрдзреЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ ! - рдмрдирд╛рдПрдБ
UITableView
ред рд╣рдо рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░рд╛ ViewController
рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдФрд░ рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рд╣реИ UITableView
, рдЗрд╕рд▓рд┐рдП рдЬреЛ рднреА рдЬрд╛рдирдХрд╛рд░реА рдЖрд╡рд╢реНрдпрдХ рд╣реИ, UITableView
рд╡рд╣ ViewController
'рдУрдо' рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЬрд╛рдПрдЧреА ред
рдЕрдм ViewController.m рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝реЗрдВ : - (void)showDataForAlbumAtIndex:(int)albumIndex {
showDataForAlbumAtIndex:
рдПрд▓реНрдмрдо рд╕рд░рдгреА рд╕реЗ рдПрд▓реНрдмрдо рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ рдПрдХрддреНрд░ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдирдпрд╛ рдбреЗрдЯрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдмрд╕ рдХреЙрд▓ рдХрд░реЗрдВ reloadData
ред рдЗрд╕ рдХреЙрд▓ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╡рд╣ UITableView
рдлрд┐рд░ рд╕реЗ рдЕрдкрдиреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рд╕реЗ рдЗрд╕ рддрд░рд╣ рдХреА рдЪреАрдЬреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреВрдЫрдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрдЧрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдХрд┐рддрдиреЗ рдЕрдиреБрднрд╛рдЧ рд╣реЛрдВрдЧреЗ, рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдХрд┐рддрдиреА рдкрдВрдХреНрддрд┐рдпрд╛рдБ, рдпрд╣ рдпрд╛ рдЙрд╕ рд╕реЗрд▓ рдХреЛ рдХреИрд╕реЗ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдПредрдЕрдВрдд рдореЗрдВ рдПрдХ рдкрдВрдХреНрддрд┐ рдЬреЛрдбрд╝реЗрдВ viewDidLoad
: [self showDataForAlbumAtIndex:currentAlbumIndex];
рдпрд╣ рд▓рд╛рдЗрди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╢реБрд░реВ рд╣реЛрдиреЗ рдкрд░ рд╡рд░реНрддрдорд╛рди рдПрд▓реНрдмрдо рдХреЛ рд▓реЛрдб рдХрд░рддреА рд╣реИред рдЪреВрдВрдХрд┐ рд╡рд░реНрддрдорд╛рди рдПрд▓реНрдмрдо currentAlbumIndex
рдХрд╛ рд╕реВрдЪрдХрд╛рдВрдХ рдкрд╣рд▓реЗ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ 0
, рдЗрд╕рд▓рд┐рдП рд╣рдо рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдкрд╣рд▓рд╛ рд╢реВрдиреНрдп рдПрд▓реНрдмрдо рджреЗрдЦрддреЗ рд╣реИрдВ редрд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рдкрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд▓рд╛рдиреЗ рд╕реЗ, рд╣рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ ... рдХреНрд░реИрд╢:
рдХреНрдпрд╛ рдЪрд▓ рд░рд╣рд╛ рд╣реИ?
рд╣рдордиреЗ рдЕрдкрдирд╛ ViewController
рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдФрд░ рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рд╣реИ UITableView
ред рд▓реЗрдХрд┐рди!
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рд╡рд┐рдзрд┐рдпреЛрдВ (рд╕рд╣рд┐рдд tableView:numberOfRowsInSection:
) рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП , рд▓реЗрдХрд┐рди рд╣рдордиреЗ рдЕрднреА рддрдХ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИредрдЗрди рджреЛ рддрд░реАрдХреЛрдВ рдХреЛ рджреЗрдЦреЗрдВ ViewController.m , рдХреЗ рдмреАрдЪ @implementation
рдФрд░ рдХрд╣реАрдВ рднреА @end
: - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return [currentAlbumData[@"titles"] count]; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:@"cell"]; if (!cell) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:@"cell"]; } cell.textLabel.text = currentAlbumData[@"titles"][indexPath.row]; cell.detailTextLabel.text = currentAlbumData[@"values"][indexPath.row]; return cell; }
tableView:numberOfRowsInSection:
рдЙрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ TableView
, рдЬреЛ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдлрд╝реАрд▓реНрдб рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИредtableView:cellForRowAtIndexPath:
рдлрд╝реАрд▓реНрдб рдирд╛рдо ( title
) рдФрд░ рдЙрд╕рдХреЗ рдорд╛рди ( value
) рдХреЗ рд╕рд╛рде рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рд╕реЗрд▓ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рд▓реМрдЯрд╛рддрд╛ рд╣реИ редрдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдпрд╣рд╛рдВ рд╣рдореЗрдВ рд╡рд╣реА рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдП:
рдЕрднреА рддрдХ, рд╕рдм рдХреБрдЫ рдареАрдХ рдЪрд▓ рд░рд╣рд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рд▓реЗрдЦ рдореЗрдВ рдкрд╣рд▓реА рдЫрд╡рд┐ рдХреЛ рдпрд╛рдж рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдПрд▓реНрдмрдореЛрдВ рдХреЗ рдмреАрдЪ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдХреНрд╖реИрддрд┐рдЬ рд╕реНрдХреНрд░реЙрд▓ рдерд╛редрдореИрдВ рдПрдХ "рдПрдХ рдмрд╛рд░" рд╕реНрдХреНрд░реЙрд▓ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛, рд▓реЗрдХрд┐рди рдПрдХ рдЬрд┐рд╕реЗ рдлрд┐рд░ рд╕реЗ рдХрд┐рд╕реА рднреА рд╕реНрдХреНрд░реАрди рдкрд░ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ? рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рднреА рдирд┐рд░реНрдгрдп рдХрд┐рд╕реА рдЕрдиреНрдп рдСрдмреНрдЬреЗрдХреНрдЯ - рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЛ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдХреНрд╖реИрддрд┐рдЬ рд╕реНрдХреНрд░реЙрд▓ рдЙрди рддрд░реАрдХреЛрдВ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░реЗрдЧрд╛ рдЬреЛ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╡реИрд╕реЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЗ рддрд░реАрдХреЛрдВ рдиреЗ рдХрд╛рдо рдХрд┐рдпрд╛UITableView
ред рд╣рдо рдЗрд╕реЗ рдЕрдЧрд▓реЗ рдкреИрдЯрд░реНрди рдХреА рдЪрд░реНрдЪрд╛ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд░реЗрдВрдЧреЗред"рдПрдбрд╛рдкреНрдЯрд░"
рдПрдбреЗрдкреНрдЯрд░ рдЕрд╕рдВрдЧрдд рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд╕рд╛рде рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рдПрдХ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдПрдХ рдПрдбрд╛рдкреНрдЯрд░ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдПрдХ рдЖрд╡рд░рдг рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХреАрдХреГрдд рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ ред
рдпрджрд┐ рдЖрдк рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ "рдПрдбреЗрдкреНрдЯрд░" рдкреИрдЯрд░реНрди рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВ, рддреЛ рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдРрдкреНрдкрд▓ рдЗрд╕реЗ рдЕрдЬреАрдмреЛрдЧрд░реАрдм рддрд░реАрдХреЗ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ (рд▓рдЧрднрдЧ рдорд╛рдЗрдХреНрд░реЛрдпреВрдПрд╕рдмреА рдореЗрдВ рдпреВрд░реЛрдкреАрдп рдЖрдпреЛрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреА рддрд░рд╣)ред рд╡реЗ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдРрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВред рдЖрдк рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рд╕рд╛рде рдкрд░рд┐рдЪрд┐рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ UITableViewDelegate
, UIScrollViewDelegate
, NSCoding
, NSCopying
ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ NSCopying
рдХрд┐рд╕реА рднреА рд╡рд░реНрдЧ рдХреЛ рдПрдХ рдорд╛рдирдХ рд╡рд┐рдзрд┐ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ copy
редрдПрдбреЗрдкреНрдЯрд░ рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ
рдЙрдкрд░реЛрдХреНрдд рдХреНрд╖реИрддрд┐рдЬ рд╕реНрдХреНрд░реЙрд▓ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛:
рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, "рдЙрджреНрджреЗрд╢реНрдп-рд╕реА рд╡рд░реНрдЧ" рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕реЗ рдПрдХ рдирдпрд╛ рд╡рд░реНрдЧ рдмрдирд╛рдПрдВ (рдХреНрдпрд╛ рдЖрдк рднреВрд▓ рдЧрдП рд╣реИрдВ?) рджреГрд╢реНрдп рд╕рдореВрд╣ рдореЗрдВ, рдЗрд╕реЗ рдирд╛рдо рджреЗрдВ HorizontalScroller
рдФрд░ рдЗрд╕реЗ рдЗрдирд╣реЗрд░рд┐рдЯ рдХрд░реЗрдВ UIView
ред рдХреНрд╖реИрддрд┐рдЬ рдШреБрдордХреНрдХрдбрд╝рдЦреЛрд▓реЗрдВред рдЗрд╕рдХреЗ рдмрд╛рдж рдЬреЛрдбрд╝реЗрдВ :@end
@protocol HorizontalScrollerDelegate <NSObject>
рдЗрд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рд╣рдо рдПрдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ HorizontalScrollerDelegate
- рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╕реЗ рдПрдХ NSObject
рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо (рдЙрд╕реА рддрд░рд╣ рдЬреИрд╕реЗ рдХрд┐ рдХрдХреНрд╖рд╛рдПрдВ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА рд╣реИрдВ)ред рд╕рд╛рдорд╛рдиреНрдп рдЕрднреНрдпрд╛рд╕ рдПрдХ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ NSObject
рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдХрд┐ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рд▓рд┐рдП рд╡рд┐рд░рд╛рд╕рдд / рдЕрдиреБрд░реВрдк рд╣реЛрддрд╛ рд╣реИ NSObject
ред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдо NSObject
рдЕрдкрдиреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗ HorizontalScroller
ред рд╣рдо рдЬрд▓реНрдж рд╣реА рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдпрд╣ рдХреНрдпреЛрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИредрд╣рдо рдЖрд╡рд╢реНрдпрдХ рдФрд░ рд╡реИрдХрд▓реНрдкрд┐рдХ рддрд░реАрдХреЛрдВ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреЗ рдмреАрдЪ @protocol
рдФрд░ @end
: @required
рдпрд╣рд╛рдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЖрд╡рд╢реНрдпрдХ рдФрд░ рд╡реИрдХрд▓реНрдкрд┐рдХ рддрд░реАрдХреЗ рд╣реИрдВред рдЕрдирд┐рд╡рд╛рд░реНрдп - рдкреНрд░рддрд┐рдирд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЙрдирдХреЗ рдкрд╛рд╕ рдЖрдорддреМрд░ рдкрд░ рд╡рд╣ рдбреЗрдЯрд╛ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рд╡рд░реНрдЧ рдХреЛ рдмрд┐рд▓реНрдХреБрд▓ рдЪрд╛рд╣рд┐рдПред рдпрд╣рд╛рдВ рд╣рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ (рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡), рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рд╕реВрдЪрдХрд╛рдВрдХ рдкрд░ рдПрдХ рддрддреНрд╡, рд╕рд╛рде рд╣реА рдПрдХ рддрддреНрд╡ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдкрд░ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИредрдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╡рд┐рдзрд┐ рдкреНрд░рд╛рд░рдВрдн рддрддреНрд╡ рдХрд╛ рд╕реВрдЪрдХрд╛рдВрдХ рд╣реИред рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ HorizontalScroller
рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ рдпрд╣ рдЦрддреНрдо рд╣реЛ рдЬрд╛рдПрдЧрд╛редрдЕрдЧрд▓рд╛, рд╣рдореЗрдВ рдХрдХреНрд╖рд╛ рдШреЛрд╖рдгрд╛ рдХреЗ рдЕрдВрджрд░ рдЕрдкрдиреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЗ рдирд╛рдо рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП HorizontalScroller
ред рд▓реЗрдХрд┐рди рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрдХреНрд╖рд╛ рдХреЗ рдмрд╛рдж рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддреНред рдШреЛрд╖рдгрд╛ рдХреЗ рд╕рдордп рдЕрднреА рддрдХ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗ рд░рд╣рд╛ рд╣реИ HorizontalScroller
ред рдХреНрдпрд╛ рдХрд░реЗрдВ?
рд╕рдорд╛рдзрд╛рди рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдПрдХ рдЖрдЧреЗ рдХреА рдШреЛрд╖рдгрд╛ рд╣реИ HorizontalScrollerDelegate
ред рддрд╛рдХрд┐ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рдкрддрд╛ рдЪрд▓реЗ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдРрд╕рд╛ рдХреЛрдИ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╣реИ (рд▓реЗрдХрд┐рди рдмрд╛рдж рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛)ред рд▓рд╛рдЗрди рдХреЗ рдКрдкрд░ рдЬреЛрдбрд╝реЗрдВ @interface
: @protocol HorizontalScrollerDelegate;
рдПрдХ рд╣реА рдлрд╛рдЗрд▓ рдореЗрдВ HorizontalScroller.h рдХреЗ рдмреАрдЪ рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рдПрдХ рдЬреЛрдбрд╝реЗ рдХреЛ рдЬреЛрдбрд╝рдиреЗ @interface
рдФрд░ @end
: @property (weak) id<HorizontalScrollerDelegate> delegate; - (void)reload;
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╣рдордиреЗ weak
рд╕рдВрдкрддреНрддрд┐ (рдкреЙрдЗрдВрдЯрд░) рдХреЛ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ ("рдХрдордЬреЛрд░") рдЬреЛрдбрд╝рд╛ рд╣реИ delegate
ред рд░рд┐рдЯреЗрди-рд▓реВрдкрд┐рдВрдЧ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдпрджрд┐ рдХреЛрдИ рдСрдмреНрдЬреЗрдХреНрдЯ рдПрдХ рдордЬрдмреВрдд рдкреЙрдЗрдВрдЯрд░ рдХреЛ рдПрдХ рдбреЗрд▓реАрдЧреЗрдЯ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдПрдХ рдбреЗрд▓реАрдЧреЗрдЯ рдПрдХ рдордЬрдмреВрдд рдкреЙрдЗрдВрдЯрд░ рдХреЛ рд╡рд╛рдкрд╕ рдЙрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рд╕реНрдЯреЛрд░ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдореЗрдореЛрд░реА рд▓реАрдХ рд╣реЛрдиреЗ рдХреА рдЧрд╛рд░рдВрдЯреА рджреА рдЬрд╛рддреА рд╣реИред рджреЛрдиреЛрдВ рдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рд╡рд╕реНрддреБ рдХрднреА рднреА рд╕реНрдореГрддрд┐ рдХреЛ рдореБрдХреНрдд рдирд╣реАрдВ рдХрд░реЗрдЧреАред(рдпрджрд┐ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдордЬрдмреВрдд рдФрд░ рдХрдордЬреЛрд░ рдмрд┐рдВрджреБрдУрдВ рдХреЗ рдмреАрдЪ рдХреЗ рдЕрдВрддрд░ рдХреЛ рднреВрд▓ рдЧрдпрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╕реНрдкреЙрдЗрд▓рд░ рдХреЗ рддрд╣рдд "рдореБрдЦреМрдЯрд╛" рдкреИрдЯрд░реНрди рдХреЗ рдЙрдкрдпреЛрдЧ рдкрд░ рдЕрдзреНрдпрд╛рдп рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИ)редрдкреНрд░рдХрд╛рд░ рдХрд╛ id<HorizontalScrollerDelegate>
рдорддрд▓рдм рд╣реИ рдХрд┐ рдХрд┐рд╕реА рднреА рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ HorizontalScrollerDelegate
рдЬреЛ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИ (рдЬреЛ рд╣рдореЗрдВ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреА рд╕реБрд░рдХреНрд╖рд╛ рджреЗрддрд╛ рд╣реИ) рдПрдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдмрди рд╕рдХрддрд╛ рд╣реИ редрд╡рд┐рдзрд┐ reload
рдЗрд╕реА рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ reloadData
рдХреЗ рд▓рд┐рдПUITableView
: рдпрд╣ рдХреНрд╖реИрддрд┐рдЬ рд╕реНрдХреНрд░реЙрд▓ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рднреА рдбреЗрдЯрд╛ рдХреЛ рдкреБрдирдГ рд▓реЛрдб рдХрд░реЗрдЧрд╛ред рдХреНрд╖реИрддрд┐рдЬ рд░рд┐рдХреНрдд рд╕реНрдерд╛рдирдХреА рд╕рдВрдкреВрд░реНрдг рд╕рд╛рдордЧреНрд░реА рдХреЛ рдРрд╕реЗ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рд╕реЗ рдмрджрд▓реЗрдВ (рд╣рдо рдЗрд╕реЗ рднрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдВрдЧреЗ): #import "HorizontalScroller.h"
рдЙрди рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдЬреЛ рд╣рдо рдХрд░рддреЗ рд╣реИрдВ:- рд╣рдо рд╡рд┐рдХрд╛рд╕ рдХреЗ рд╕реНрддрд░ рдкрд░ рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╕рдВрд╢реЛрдзрди рдХреЗ рд▓рд┐рдП рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рд╕реНрдХреНрд░реЙрд▓ рдХреЗ рдЕрдВрджрд░ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЗ рдЖрдпрд╛рдо 100x100 рдЕрдВрдХ рд╣реЛрдВрдЧреЗ, рдЬреЛ рдЖрдпрдд рд╕реЗ 10 рдмрд┐рдВрджреБрдУрдВ рдХреЗ рдПрдХ рдЗрдВрдбреЗрдВрдЯ рдХреЗ рд╕рд╛рде рдЙрдиреНрд╣реЗрдВ рдлрд╝реНрд░реЗрдо рдХрд░рддреЗ рд╣реИрдВред
(рдкреЙрдЗрдВрдЯреНрд╕ рдкрд┐рдХреНрд╕рд▓ рдХреЗ рд╕рд╛рде рднреНрд░рдорд┐рдд рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ! IOS рдбреНрд░реЙрдЗрдВрдЧ рдХреЙрдиреНрд╕реЗрдкреНрдЯреНрд╕ рдореЗрдВ рдПрдХ рдкреЙрдЗрдВрдЯ рд╡рд░реНрд╕реЗрд╕ рдкрд┐рдХреНрд╕рд▓ рд╕реЗрдХреНрд╢рди рд╣реИ ) ред - рд╣реЙрд░рд┐рдЬрд╝реЙрдиреНрдЯрд▓рд╕рдХреНрд░реЙрд▓рд░ рдХреНрд▓рд╛рд╕ UIScrollViewDelegate рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рд╣реЙрд░рд┐рдЬрд╝реЙрдиреНрдЯрд▓рд╕рдХреНрд░реЙрд▓рд░ рдПрд▓реНрдмрдо рдЖрд░реНрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдХреНрд░реЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП UIScrollView рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдШрдЯрдирд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдирд╛ рд╣реЛрдЧрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗ рд╕реНрдХреНрд░реЙрд▓ рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рд╣реИред
- рджрд░рдЕрд╕рд▓, рд╣рдо рдПрдХ рд╕реНрдХреНрд░реЙрд▓ рджреГрд╢реНрдп рдмрдирд╛рддреЗ рд╣реИрдВред
рдЖрдЧреЗ рд╣рдореЗрдВ рдПрдХ рдЖрд░рдВрднреАрдХрд░рдг рд╡рд┐рдзрд┐ рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: - (id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { scroller = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, frame.size.width, frame.size.height)]; scroller.delegate = self; [self addSubview:scroller]; UITapGestureRecognizer * tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(scrollerTapped:)]; [scroller addGestureRecognizer:tapRecognizer]; } return self; }
рд╕реНрдХреНрд░реЙрд▓ рдлрд▓рдХ ( scroller
) рдкреВрд░реА рддрд░рд╣ рд╕реЗ рднрд░ рдЬрд╛рддрд╛ рд╣реИ HorizontalScroller
ред рдХреНрд▓рд╛рд╕ рдСрдмреНрдЬреЗрдХреНрдЯ UITapGestureRecognizer
рдЗрд╕ рд╕реНрдХреНрд░реЙрд▓ рджреГрд╢реНрдп рдкрд░ рдЫреВрддрд╛ рд╣реИ рдФрд░ рдЬрд╛рдВрдЪрддрд╛ рд╣реИ рдХрд┐ рдПрд▓реНрдмрдо рдХрд╡рд░ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдпрд╛ рдирд╣реАрдВред рдпрджрд┐ рдпрд╣ рд╣реИ, рддреЛ рдпрд╣ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ HorizontalScroller
редрдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝реЗрдВ: - (void)scrollerTapped:(UITapGestureRecognizer *)gesture { CGPoint location = [gesture locationInView:gesture.view];
gesture
рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд "рдЗрд╢рд╛рд░рд╛" ( ) рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реЗ , рдЖрдк рд╕реНрдерд┐рддрд┐ рдХреЛ рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ ( locationInView:
)редрддрдм рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдкрджреНрдзрддрд┐ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ numberOfViewsForHorizontalScroller:
ред рдЙрджрд╛рд╣рд░рдг HorizontalScroller
рдореЗрдВ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рд╣реИ, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдЖрдк рдЙрд╕реЗ рдпрд╣ рд╕рдВрджреЗрд╢ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВ (рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЕрдиреБрдкрд╛рд▓рди рдХрд░рддрд╛ рд╣реИ HorizontalScrollerDelegate
)редрдкреНрд░рддреНрдпреЗрдХ рджреГрд╢реНрдп рдХреЗ рд▓рд┐рдП, рд╕реНрдХреНрд░реЙрд▓ рджреГрд╢реНрдп рдХреЗ рдЕрдВрджрд░ - рдЪреЗрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдХрд┐ рдХреНрдпрд╛ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдЙрд╕ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ CGRectContainsPoint
ред рдпрджрд┐ рдЖрдкрдХреЛ рдРрд╕рд╛ рдХреЛрдИ рджреГрд╢реНрдп рдорд┐рд▓рддрд╛ рд╣реИ, рддреЛ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЛ рдПрдХ рд╕рдВрджреЗрд╢ рднреЗрдЬреЗрдВ horizontalScroller:clickedViewAtIndex:
рдФрд░ рдЪрдпрдирд┐рдд рдЖрдЗрдЯрдо рдХреЛ рд╕реНрдХреНрд░реЙрд▓ рдХреНрд╖реЗрддреНрд░ рдХреЗ рдХреЗрдВрджреНрд░ рдореЗрдВ рд╕реЗрдЯ рдХрд░реЗрдВредрдЕрдм рд╕реНрдХреЙрд▓рд░ рдореЗрдВ рдбреЗрдЯрд╛ рдЕрдкрдбреЗрдЯ рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ: - (void)reload {
рдЖрдЗрдП рдЗрд╕ рдХреЛрдб рд╕реЗ рдЧреБрдЬрд░реЗрдВ:- рдЕрдЧрд░ рдХреЛрдИ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдирд╣реАрдВ рд╣реИ, рддреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдпрд╣рд╛рдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдирд╣реАрдВ рд╣реИред рд╣рдо рд╡рд┐рдзрд┐ рдХреЛ рдкреВрд░рд╛ рдХрд░рддреЗ рд╣реИрдВред
- (subviews), .
(, ┬лsubview┬╗ ? ┬л┬╗ . :) тАФ . .) - (
VIEWS_OFFSET
). 100
, #define
. HorizontalScroller
( UIView
) , .- , , .
HorizontalScroller
рджрд┐рдЦрддрд╛ рд╣реИ: рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдЪрдпрдирдХрд░реНрддрд╛ рдХреЗ рд╕рдВрджреЗрд╢ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрддрд╛ рд╣реИ initialViewIndexForHorizontalScroller:
ред рдпрд╣ рдЬрд╛рдБрдЪ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╡рд┐рдзрд┐ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИред рдпрджрд┐ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ 0
ред рдХреЛрдб рдХрд╛ рдпрд╣ рдЯреБрдХрдбрд╝рд╛ рд╕реНрдХреНрд░реЙрд▓ рджреГрд╢реНрдп рдХреЛ рдкреНрд░рддрд┐рдирд┐рдзрд┐ ( initialView
) рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рджреГрд╢реНрдп рдХреЗ рдХреЗрдВрджреНрд░ рдореЗрдВ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ ред
рд╣рдо reload
рдЗрд╕реЗ рдХрд░рддреЗ рд╣реИрдВ рдпрджрд┐ рд╣рдорд╛рд░рд╛ рдбреЗрдЯрд╛ рдмрджрд▓ рдЧрдпрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЛ рддрдм рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрдм рд╣рдо HorizontalScroller
рдирдП рджреГрд╢реНрдп рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рдХрдХреНрд╖рд╛ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ HorizontalScroller
: - (void)didMoveToSuperview { [self reload]; }
рд╕рдВрджреЗрд╢ рдХрд╛ рдЕрд░реНрде didMoveToSuperview
, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рдирд╛рдо рд╕реЗ рд╕реНрдкрд╖реНрдЯ рд╣реИ: рдпрд╣ рд╣рдорд╛рд░реЗ рд╡рд┐рдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдЗрд╕реЗ рдПрдХ рдмрдЪреНрдЪреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рд╕реА рдФрд░ рд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдкрдХреЛ рд╕реНрдХреЛрд░рд░ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИредрдкрд╣реЗрд▓реА HorizontalScroller
рдХрд╛ рдЕрдВрддрд┐рдо рднрд╛рдЧ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рд╣реИ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЪрдпрдирд┐рдд рдПрд▓реНрдмрдо рд╣рдореЗрд╢рд╛ рд╕реНрдХреНрд░реЙрд▓ рджреГрд╢реНрдп рдХреЗ рдХреЗрдВрджреНрд░ рдореЗрдВ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╕реНрдХреНрд░реЙрд▓ рдХрд░рддреЗ рд╕рдордп рд╣рдореЗрдВ рдХреБрдЫ рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИредрдирд┐рдореНрди рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝реЗрдВ (рд╕рднреА рдПрдХ рд╣реА рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП, рд╣рд╛рдБ, рдХреНрд╖реИрддрд┐рдЬ рдХреНрд╖реИрддрд┐рдЬред ): - (void)centerCurrentView { int xFinal = scroller.contentOffset.x + (VIEWS_OFFSET / 2) + VIEW_PADDING; int viewIndex = xFinal / (VIEW_DIMENSIONS + (2 * VIEW_PADDING)); xFinal = viewIndex * (VIEW_DIMENSIONS + (2 * VIEW_PADDING)); [scroller setContentOffset:CGPointMake(xFinal, 0) animated:YES]; [self.delegate horizontalScroller:self clickedViewAtIndex:viewIndex]; }
рдпрд╣ рдХреЛрдб рд╡рд░реНрддрдорд╛рди рд╕реНрдХреНрд░реЙрд▓ рдСрдлрд╕реЗрдЯ (рд╕рд╛рдордЧреНрд░реА рдСрдлрд╕реЗрдЯ), рд╕рд╛рде рд╣реА рдЖрдпрд╛рдо (рдЖрдпрд╛рдо) рдФрд░ рдкреИрдбрд┐рдВрдЧ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХреЗрдВрджреНрд░ рд╕реЗ рд╡рд░реНрддрдорд╛рди рджреГрд╢реНрдп рдХреА рджреВрд░реА рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИред рдЕрдВрддрд┐рдо рдкрдВрдХреНрддрд┐ рдХрд╛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЕрд░реНрде рд╣реИ: рдЬрдм рд╣рдорд╛рд░реЗ рдПрд▓реНрдмрдо рдХреЛ рдХреЗрдВрджреНрд░ рдореЗрдВ рд▓реЗ рдЬрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЕрдВрдд рдореЗрдВ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЪрдпрди рдмрджрд▓ рдЧрдпрд╛ рд╣реИредрдЙрд╕ рдХреНрд╖рдг рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗ рд╕реНрдХреНрд░реЙрд▓ рдХрд░рдирд╛ рд╕рдорд╛рдкреНрдд рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ, рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ UIScrollViewDelegate
: - (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate { if (!decelerate) { [self centerCurrentView]; } } - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView { [self centerCurrentView]; }
scrollViewDidEndDragging:willDecelerate:
рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбреНрд░реИрдЧрд┐рдВрдЧ рд╕рдорд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рддреЛ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЛ рдмрддрд╛рддрд╛ рд╣реИред рдпрджрд┐ рд╕реНрдХреНрд░реЙрд▓ рдЕрднреА рддрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмрдВрдж рдирд╣реАрдВ рд╣реБрдЖ рд╣реИ, рд▓реЗрдХрд┐рди рдкреИрд░рд╛рдореАрдЯрд░ decelerate
("рдордВрджреА") рдореВрд▓реНрдп рд▓реЗрддрд╛ рд╣реИ true
, рд▓реЗрдХрд┐рди "рдЬрдбрд╝рддрд╛ рд╕реЗ" рдЪрд▓рддрд╛ рд░рд╣рддрд╛ рд╣реИред рдЬрдм рд╕реНрдХреНрд░реЙрд▓рд┐рдВрдЧ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмрдВрдж рд╣реЛ рдЬрд╛рддреА рд╣реИ, рддреЛ рд╕рд┐рд╕реНрдЯрдо рд╣рдореЗрдВ рдПрдХ рд╕рдВрджреЗрд╢ рднреЗрдЬреЗрдЧрд╛ scrollViewDidEndDecelerating
ред рджреЛрдиреЛрдВ рд╣реА рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рд╣рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдПрд▓реНрдмрдо рдХреЛ рдХреЗрдВрджреНрд░ рдореЗрдВ рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП ( centerCurrentView
), рд╡рд░реНрддрдорд╛рди рдПрд▓реНрдмрдо рдХреЗ рдмрд╛рдж рд╕реЗ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд╕реНрдХреНрд░реЙрд▓ рдХрд░рдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИредрдЖрдкрдХрд╛ HorizontalScroller
рддреИрдпрд╛рд░! рдЗрд╕ рдХреЛрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рджреЗрдЦреЗрдВред рдпрд╣рд╛рдБ рд╡рд╣рд╛рдБ рдХреЛрдИ рдЬрд┐рдХреНрд░ рдирд╣реАрдВ рд╣реИ Album
рдпрд╛ AlbumView
ред рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛!
рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рд╣рдорд╛рд░рд╛ рдирдпрд╛ рд╕реНрдХреЛрд░рд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рд╛рдордЧреНрд░реА рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд╣реИ, рдФрд░ рдЗрд╕рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИредрд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рд╕рдм рдХреБрдЫ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВредрдЕрдм рдЬрдм рдХреНрд╖реИрддрд┐рдЬ рд╕реНрдХреНрд░реЙрд▓ рддреИрдпрд╛рд░ рд╣реЛ рдЧрдпрд╛ рд╣реИ, рддреЛ рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ! ViewController.m рдЦреЛрд▓реЗрдВ рдФрд░ рдЗрд╕рдореЗрдВ 2 рд╣реЗрдбрд░ рдлрд╛рдЗрд▓реЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ: #import "HorizontalScroller.h" #import "AlbumView.h"
рдиреАрдЪреЗ HorizontalScrollerDelegate
рд▓рд╛рдЧреВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреА рд╕реВрдЪреА рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ ViewController
: @interface ViewController () <UITableViewDataSource, UITableViewDelegate, HorizontalScrollerDelegate>
рд╡рд░реНрдЧ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдореЗрдВ рдШреБрдордХреНрдХрдбрд╝ рдЙрджрд╛рд╣рд░рдг рдЪрд░ рдХреЛ рдЬреЛрдбрд╝реЗрдВ (рдШреБрдВрдШрд░рд╛рд▓реЗ рдмреНрд░реЗрд╕рд┐рдЬрд╝ рдХреЗ рдмреАрдЪ): HorizontalScroller * scroller;
рдЕрдм рдЖрдк рдкреНрд░рддрд┐рдирд┐рдзрд┐ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдкрдХреЛ рдЖрд╢реНрдЪрд░реНрдп рд╣реЛрдЧрд╛ рдХрд┐ рдХрдИ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЫреЛрдЯреЗ рдХреЛрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреИрд╕реЗ рд╣реЛрддреА рд╣реИ! ViewController.mрдХреЗ рд▓рд┐рдП рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ : #pragma mark - HorizontalScrollerDelegate methods - (void)horizontalScroller:(HorizontalScroller *)scroller clickedViewAtIndex:(int)index { currentAlbumIndex = index; [self showDataForAlbumAtIndex:index]; }
рдпрд╣ рдЙрд╕ рдЪрд░ рдХрд╛ рдорд╛рди рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╡рд░реНрддрдорд╛рди рдПрд▓реНрдмрдо рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ showDataForAlbumAtIndex: рдирдП рдПрд▓реНрдмрдо рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реИредрдиреЛрдЯредрдХрднреА-рдХрднреА рдХрдИ рддрд░реАрдХреЛрдВ рдХреЛ рдПрдХ рд╢реАрд░реНрд╖рдХ рдХреЗ рддрд╣рдд рд╡рд░реНрдЧреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рд╢реАрд░реНрд╖рд╛рд╕рди рдПрдХ рдирд┐рд░реНрджреЗрд╢ рд╣реИ #pragma mark
ред рд╕рдВрдХрд▓рдХ рдЗрд╕реЗ рдЕрдирджреЗрдЦрд╛ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдЖрдИрдбреАрдИ рдореЗрдВ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдкреИрдирд▓ рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рджреЗрдЦреЗрдВрдЧреЗ - рдмреЛрд▓реНрдб рдореЗрдВ рд╣рдорд╛рд░реЗ рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдирд╛рдоред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, AppCode рдореЗрдВ, , F12 рджрдмрд╛рдХрд░ :
рдХреЛрдб рдХрд╛ рдРрд╕рд╛ рд╕рдВрдЧрдарди, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рдлрд╝рд╛рдЗрд▓ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдХреЛ рдмрд╣реБрдд рд╕рд░рд▓ рдХрд░рддрд╛ рд╣реИредрдлрд┐рд░ рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ: - (NSInteger)numberOfViewsForHorizontalScroller:(HorizontalScroller *)scroller { return allAlbums.count; }
рдХреНрдпрд╛ рдЖрдкрдХреЛ рдпрд╛рдж рд╣реИ? рдпрд╣ рдПрдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╡рд┐рдзрд┐ рд╣реИ рдЬреЛ рд╣рдорд╛рд░реЗ рд╕реНрдХреНрд░реЙрд▓ рджреГрд╢реНрдп рдореЗрдВ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд▓реМрдЯрд╛рддреА рд╣реИред рд╣рдо рдЙрди рд╕рднреА рдПрд▓реНрдмрдореЛрдВ рдХреЗ рдХрд╡рд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдХреБрд▓ рдПрд▓реНрдмрдореЛрдВ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рддреЗ рд╣реИрдВредрдЕрдм рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ: - (UIView *)horizontalScroller:(HorizontalScroller *)scroller viewAtIndex:(int)index { Album * album = allAlbums[index]; return [[AlbumView alloc] initWithFrame:CGRectMake(0.f, 0.f, 100.f, 100.f) albumCover:album.coverUrl]; }
рдпрд╣рд╛рдВ рд╣рдо рдПрдХ рдирдпрд╛ рдмрдирд╛рддреЗ рд╣реИрдВ AlbumView
рдФрд░ рдЗрд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ HorizontalScroller
редрдмрд╕ рдХреБрдЫ! рдПрдХ рд╕реБрдВрджрд░ рдХреНрд╖реИрддрд┐рдЬ рд╕реНрдХреЛрд░рд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреАрди рдЫреЛрдЯреЗ рддрд░реАрдХреЗ!рд╣рд╛рдВ, рдФрд░ рд╣рдореЗрдВ рдЕрднреА рднреА рдПрдХ (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ) рд╕реНрдХреЛрд░рд░ рдмрдирд╛рдирд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдореБрдЦреНрдп рджреГрд╢реНрдп рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рд╣реИред рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝реЗрдВ: - (void)reloadScroller { allAlbums = [[LibraryAPI sharedInstance] albums]; if (currentAlbumIndex < 0) currentAlbumIndex = 0; else if (currentAlbumIndex >= allAlbums.count) currentAlbumIndex = allAlbums.count - 1; [scroller reload]; [self showDataForAlbumAtIndex:currentAlbumIndex]; }
рдпрд╣ рд╡рд┐рдзрд┐ рдПрд▓реНрдмрдо рдбреЗрдЯрд╛ рдХреЛ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓реЛрдб рдХрд░рддреА рд╣реИ LibraryAPI
, рдФрд░ рдлрд┐рд░ рд╡рд░реНрддрдорд╛рди рджреГрд╢реНрдп рд╕реЗрдЯ рдХрд░рддреА рд╣реИред рдмрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рд░рдгреА рдХреА рд╕реАрдорд╛рдУрдВ рд╕реЗ рдкрд░реЗ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдВрдЪреЗрдВредрдЕрдм viewDidLoad
рд▓рд╛рдЗрди рдХреЗ рд╕рд╛рдордиреЗ рдирд┐рдореНрди рдХреЛрдб рдЬреЛрдбрд╝рдХрд░ рд╕реНрдХреЛрд░рд░ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░реЗрдВ[self showDataForAlbumAtIndex:currentAlbumIndex];
scroller = [[HorizontalScroller alloc] initWithFrame:CGRectMake(0.f, 20.f, self.view.frame.size.width, 120.f)]; scroller.backgroundColor = [UIColor colorWithRed:0.24f green:0.35f blue:0.49f alpha:1]; scroller.delegate = self; [self.view addSubview:scroller]; [self reloadScroller];
рдпрд╣ рдХреЛрдб рдПрдХ рдирдпрд╛ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рддрд╛ рд╣реИ HorizontalScroller
, рдкреГрд╖реНрдарднреВрдорд┐ рдХрд╛ рд░рдВрдЧ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ, рдПрдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рдпреБрдХреНрдд рдХрд░рддрд╛ рд╣реИред рдлрд┐рд░ рдпрд╣ рдореБрдЦреНрдп рд╕реНрдХреНрд░реАрди рдкрд░ рдПрдХ рдШреБрдордХреНрдХрдбрд╝ рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдбреЗрдЯрд╛ рдЕрдкрдбреЗрдЯ рдХрд░рддрд╛ рд╣реИредрдиреЛрдЯредрдпрджрд┐ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдмрд╣реБрдд рдмрдврд╝рддрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рдХрдИ рдЫреЛрдЯреЗ рд▓реЛрдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, UITableViewDelegate
рдФрд░ UITableViewDataSource
ред рджреЛрдиреЛрдВ рд╣реА рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╣реИрдВ UITableView
, рдЕрд░реНрдерд╛рдд рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ, рд╡реЗ рдПрдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдореЗрдВ рдореМрдЬреВрдж рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдЯреВрдЯ рдЧрдП рд╣реИрдВред рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ рддрд╛рдХрд┐ рд╣рд░ рдХреЛрдИ рдЕрдкрдиреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реЛредрдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ рдФрд░ рдЪрд▓рд╛рдПрдВред рдЕрджреНрднреБрдд рдХреНрд╖реИрддрд┐рдЬ рд╕реНрдХреНрд░реЙрд▓:
рддреЛ рдЗрд╕реЗ рдмрдВрдж рдХрд░реЛред
рд╕реНрдХреНрд░реЙрд▓ рд╣реИред рдХрд╡рд░ рдХрд╣рд╛рдВ рд╣реИрдВ?рдУрд╣ рдЬрд╝рд░реВрд░!
рд╣рдордиреЗ рдЕрднреА рддрдХ рдХрд╡рд░ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдирд╣реАрдВ рд▓рд┐рдЦрд╛ рд╣реИред рд╣рдореЗрдВ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдХреИрд╕реЗ рдЕрдкрд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдПред рдЪреВрдБрдХрд┐ рд╣рдорд╛рд░реА рд╕рднреА рд╕реЗрд╡рд╛рдУрдВ рддрдХ рдкрд╣реБрдБрдЪ рд╣реЛрддреА рд╣реИ LibraryAPI
, рдЗрд╕рд▓рд┐рдП рдирдИ рдкрджреНрдзрддрд┐ рдХреЛ рд╡рд╣рд╛рдБ рдЬрд╛рдирд╛ рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдХреБрдЫ рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:1. рдХреЗ AlbumView
рд╕рд╛рде рд╕реАрдзреЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП LibraryAPI
ред рд╣рдо рдиреЗрдЯрд╡рд░реНрдХрд┐рдВрдЧ рдХреЗ рд╕рд╛рде UI рдХреЛрдб рдирд╣реАрдВ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд╣реИ рдирд╛?2. рдЙрд╕реА рдХрд╛рд░рдг рдХреЗ LibraryAPI
рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП AlbumView
ред3. рдЙрдиреНрд╣реЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╡рд░ рд▓реЛрдб рд╣реЛрддреЗ рд╣реА LibraryAPI
рд╕реВрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП ред рдПрдХ рдкрд╣реЗрд▓реА рдХреА рддрд░рд╣ рд▓рдЧ рд░рд╣рд╛ рд╣реИ? рдирд┐рд░рд╛рд╢рд╛ рдордд рдХрд░реЛ! рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреИрдЯрд░реНрди рд╣рдорд╛рд░реА рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреВрдлрд╛рди -AlbumView
AlbumView
рдкреНрд░реЗрдХреНрд╖рдХ
рдСрдмреНрдЬрд░реНрд╡рд░ рдкреИрдЯрд░реНрди рдореЗрдВ, рдПрдХ рд╡рд╕реНрддреБ рдЕрдкрдиреЗ рд░рд╛рдЬреНрдп рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдЕрдиреНрдп рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рддреА рд╣реИред рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЬреБрдбрд╝реА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдПрдХ-рджреВрд╕рд░реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдиреЗ рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИ - рдпрд╣ рдПрдХ рд╢рд┐рдерд┐рд▓ рдпреБрдЧреНрдорд┐рдд (рдФрд░ рдЗрд╕рд▓рд┐рдП рд▓рдЪреАрд▓рд╛) рдХреЛрдб рд╣реИред рдЗрд╕ рдкреИрдЯрд░реНрди рдХрд╛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧ рддрдм рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм "рдЗрдЪреНрдЫреБрдХ рдкрд╛рд░реНрдЯрд┐рдпреЛрдВ" рдХреЛ рд╣рдорд╛рд░реА рд╡рд╕реНрддреБ рдХреЗ рдЧреБрдгреЛрдВ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реВрдЪрд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрддрд╛ рд╣реИ редрдЖрдорддреМрд░ рдкрд░ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рдХрд┐рд╕реА рдЕрдиреНрдп рд╡рд╕реНрддреБ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЕрдкрдиреА рд░реБрдЪрд┐ "рдкрдВрдЬреАрдХреГрдд" рдХрд░рддрд╛ рд╣реИред рдЬрдм рд░рд╛рдЬреНрдп рдмрджрд▓рддрд╛ рд╣реИ, рддреЛ рд╕рднреА рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реВрдЪрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдРрдкрд▓ рдХреА рдкреБрд╢ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди рд╕рд░реНрд╡рд┐рд╕ рдЗрд╕ рддрд░рд╣ рдХреА рд╕реНрдХреАрдо рдХрд╛ рдПрдХ рдЬрд╛рдирд╛-рдорд╛рдирд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИредрдпрджрд┐ рдЖрдк рдПрдорд╡реАрд╕реА (рд╕рдВрдХреЗрдд: рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ) рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ - рдЖрдкрдХреЛ рдореЙрдбрд▓ рдФрд░ рджреГрд╢реНрдп рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдмреАрдЪ рдмрд╛рддрдЪреАрдд рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди - рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд▓рд┐рдП рд╕реАрдзреЗ рд▓рд┐рдВрдХ рдХреЗ рдмрд┐рдирд╛! рдФрд░ рдпрд╣рд╛рдБ "рдСрдмреНрдЬрд░реНрд╡рд░" рдкреИрдЯрд░реНрди рдЪрд▓рди рдореЗрдВ рд╣реИредрдХреЛрдХреЛ рдЗрд╕ рдкреИрдЯрд░реНрди рдХреЛ рджреЛ рд╕рдорд╛рди рддрд░реАрдХреЛрдВ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ: рд╕реВрдЪрдирд╛рдПрдВ рдФрд░ рдХреБрдВрдЬреА-рдореВрд▓реНрдп рдЕрд╡рд▓реЛрдХрди (KVO)редрдиреЛрдЯрд┐рд╕
(рдмрд╕ рдЗрд╕реЗ рдкреБрд╢ рдФрд░ рдЕрдиреНрдп рдкреЙрдк-рдЕрдк рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рд╕рд╛рде рднреНрд░рдорд┐рдд рди рдХрд░реЗрдВред рд╣рдо рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред) рд╕реВрдЪрдирд╛рдПрдВ рд╕рджрд╕реНрдпрддрд╛-рдкреНрд░рдХрд╛рд╢рд┐рдд рдореЙрдбрд▓ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдСрдмреНрдЬреЗрдХреНрдЯ "рдкреНрд░рдХрд╛рд╢рдХ" (рдкреНрд░рдХрд╛рд╢рдХ) рдЧреНрд░рд╛рд╣рдХреЛрдВ (рдЧреНрд░рд╛рд╣рдХреЛрдВ / рд╢реНрд░реЛрддрд╛рдУрдВ) рдХреЛ рд╕рдВрджреЗрд╢ рднреЗрдЬрддрд╛ рд╣реИред рдкреНрд░рдХрд╛рд╢рдХ рдХреЛ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдкрддрд╛ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПредрд╕реВрдЪрдирд╛рдПрдБ Apple рджреНрд╡рд╛рд░рд╛ рднрд╛рд░реА рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рддреА рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм iOS рдХреАрдмреЛрд░реНрдб рджрд┐рдЦрд╛рддрд╛ рдпрд╛ рдЫрд┐рдкрд╛рддрд╛ рд╣реИ, рддреЛ рд╕рд┐рд╕реНрдЯрдо рдПрдХ рд╕реВрдЪрдирд╛ рднреЗрдЬрддрд╛ рд╣реИ: UIKeyboardWillShowNotification
рдпрд╛ UIKeyboardWillHideNotification
, рдХреНрд░рдорд╢рдГред рдЬрдм рдЖрдкрдХрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╕рд┐рд╕реНрдЯрдо рдПрдХ рдЕрдзрд┐рд╕реВрдЪрдирд╛ рднреЗрдЬрддрд╛ рд╣реИ UIApplicationDidEnterBackgroundNotification
редрдиреЛрдЯредUIApplication.h рдЦреЛрд▓реЗрдВ , рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдВрдд рдореЗрдВ рдЖрдкрдХреЛ рд╕рд┐рд╕реНрдЯрдо рджреНрд╡рд╛рд░рд╛ рднреЗрдЬреА рдЧрдИ рд╕реВрдЪрдирд╛рдУрдВ рдХреА рдПрдХ рд╡рд┐рд╢рд╛рд▓ рд╕реВрдЪреА рджрд┐рдЦрд╛рдИ рджреЗрдЧреАредрдЗрд╕реЗ рдХреИрд╕реЗ рдЦреЛрд▓реЗрдВ?1 : :
#import <UIKit/UIApplication.h>
тМШ UIApplication.h
.
2 : Frameworks ( ),
UIKit.framework ( , )
UIApplication.h :

рд╕реВрдЪрдирд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ
AlbumView.m рдкрд░ рдЬрд╛рдПрдВ рдФрд░ initWithFrame:albumCover:
рдмрд╛рдж рдореЗрдВ рдирд┐рдореНрди рдХреЛрдб рдкреЗрд╕реНрдЯ рдХрд░реЗрдВ[self addSubview:indicator];
[[NSNotificationCenter defaultCenter] postNotificationName:@"BLDownloadImageNotification" object:self userInfo:@{@"coverUrl":albumCover, @"imageView":coverImage}];
рдпрд╣ рд▓рд╛рдЗрди рд╕рд┐рдВрдЧрд▓рдЯрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рд╕реВрдЪрдирд╛ рднреЗрдЬрддрд╛ рд╣реИ NSNotificationCenter
ред рдЕрдзрд┐рд╕реВрдЪрдирд╛ рдореЗрдВ рдЫрд╡рд┐ рдХрд╛ URL рдЕрдкрд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИ рдФрд░ UIImageView
рдЬрд┐рд╕рдореЗрдВ рдЗрд╕ рдЫрд╡рд┐ рдХреЛ рд░рдЦрдирд╛ рд╣реИред рд╣рдорд╛рд░реЗ рд╕рднреА "рдЧреНрд░рд╛рд╣рдХ" рдХреЛ рдпрд╣ рдЬрд╛рдирдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдбрд╛рдЙрдирд▓реЛрдб рдХрд╛рд░реНрдп рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЕрдзрд┐рд╕реВрдЪрдирд╛ рдХрд┐рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧреАредрдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрдВрдХреНрддрд┐ рдХреЛ рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдПрдкреАрдЖрдИ рдореЗрдВ рд╡рд┐рдзрд┐ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ init
, рддреБрд░рдВрдд рдмрд╛рдж isOnline = NO
: [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(downloadImage:) name:@"BLDownloadImageNotification" object:nil];
рдпрд╣ рд╕рдореАрдХрд░рдг рдХрд╛ рджреВрд╕рд░рд╛ рднрд╛рдЧ рд╣реИ - рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ (рдЧреНрд░рд╛рд╣рдХ)ред рд╣рд░ рдмрд╛рд░ рд╡рд░реНрдЧ AlbumView
рдПрдХ рдЕрдзрд┐рд╕реВрдЪрдирд╛ рднреЗрдЬрддрд╛ рд╣реИ "BLDownloadImageNotification"
, рдЬреИрд╕рд╛ рдХрд┐ LibraryAPI
рдЗрд╕ рдЕрдзрд┐рд╕реВрдЪрдирд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрдВрдЬреАрдХреГрдд, рд╕рд┐рд╕реНрдЯрдо рд╕реВрдЪрд┐рдд рдХрд░реЗрдЧрд╛ LibraryAPI
ред рдмрджрд▓реЗ рдореЗрдВ, LibraryAPI
рдкреНрд░рджрд░реНрд╢рди рдХрд░рддрд╛ рд╣реИ downloadImage:
редрдЕрдзрд┐рд╕реВрдЪрдирд╛ рд╢реАрд░реНрд╖рдХ рдореЗрдВ, рдЙрдкрд╕рд░реНрдЧ "рдмреАрдПрд▓" = рдкрд░рд┐рдпреЛрдЬрдирд╛ рдирд╛рдо рдХреЗ BlueLibrary
рд▓рд┐рдП рд╕рдВрдХреНрд╖рд┐рдкреНрддрд┐рдХрд░рдг рдХреЛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдирд╛рдо редрд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдо рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рдХреЗ рдкрд╛рд╕ рдЬрд╛рддреЗ рд╣реИрдВ, рдПрдХ рдФрд░ рдЫреЛрдЯрд╛ рд╡рд┐рд╡рд░рдг: рд╣рдореЗрдВ рдЕрдкрдиреА рдХрдХреНрд╖рд╛ рдХреА рдПрдХ рд╕реНрдореГрддрд┐ рдХреЛ рдореБрдХреНрдд рдХрд░рдиреЗ рдкрд░ рдЕрдзрд┐рд╕реВрдЪрдирд╛ рд╕реЗ рд╕рджрд╕реНрдпрддрд╛ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрджрд┐ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╕рд┐рд╕реНрдЯрдо рдЙрд╕ рд╡рд╕реНрддреБ рдХреЛ рдПрдХ рдЕрдзрд┐рд╕реВрдЪрдирд╛ рднреЗрдЬ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрд╕реНрд╡реАрдХреГрдд рд╣реЛ рдЧрдИ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдХреНрд░реИрд╢ рд╣реЛ рд╕рдХрддрд╛ рд╣реИредрдпрджрд┐ рд░реВрд╕реА рдкреЛрд╕реНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯрд┐рд╡ рд╕реА рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛, , .
LibraryAPI.m рдХреЛ рдирд┐рдореНрди рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝реЗрдВ : - (void)dealloc { [[NSNotificationCenter defaultCenter] removeObserver:self]; }
рдЬрдм рдХрд┐рд╕реА рдХреНрд▓рд╛рд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдореЗрдореЛрд░реА рд╕реЗ рдЕрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЙрди рд╕рднреА рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди рд╕реЗ рдЕрдирд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдм рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЙрд╕реЗ рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдм рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИредрдФрд░ рдПрдХ рдмрд╛рддред рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдП рдЧрдП рдХрд╡рд░ рдХреЛ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рд╕рд╣реЗрдЬрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рддрд╛рдХрд┐ рдЖрдкрдХреЛ рдЙрдиреНрд╣реЗрдВ рдмрд╛рд░-рдмрд╛рд░ рдбрд╛рдЙрдирд▓реЛрдб рди рдХрд░рдирд╛ рдкрдбрд╝реЗред PersistencyManager.hрдЦреЛрд▓реЗрдВ рдФрд░ рджреЛ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╡рд┐рдзрд┐рдпрд╛рдБ рдЬреЛрдбрд╝реЗрдВ: - (void)saveImage:(UIImage *)image filename:(NSString *)filename; - (UIImage *)getImage:(NSString *)filename;
рдФрд░ рдпрд╣рд╛рдБ PersistencyManager.m рдореЗрдВ рдЙрдирдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ : - (void)saveImage:(UIImage *)image filename:(NSString *)filename { filename = [NSHomeDirectory() stringByAppendingFormat:@"/Documents/%@", filename]; NSData * data = UIImagePNGRepresentation(image); [data writeToFile:filename atomically:YES]; } - (UIImage *)getImage:(NSString *)filename { filename = [NSHomeDirectory() stringByAppendingFormat:@"/Documents/%@", filename]; NSData * data = [NSData dataWithContentsOfFile:filename]; return [UIImage imageWithData:data]; }
рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдиреЗ рд▓рдЧрддрд╛ рд╣реИред рдбрд╛рдЙрдирд▓реЛрдб рдХреА рдЧрдИ рдЫрд╡рд┐рдпрд╛рдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдлрд╝реЛрд▓реНрдбрд░ рдХреЗ рдЕрдВрджрд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ / рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕рд╣реЗрдЬреА рдЬрд╛рддреА рд╣реИрдВ ред рдпрджрд┐ рдлрд╝рд╛рдЗрд▓ рдирд╣реАрдВ рдорд┐рд▓реА рд╣реИ рддреЛ getImage:
рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧреА nil
ред (рдпрд╣ рдмреБрд░рд╛ рд╢реИрд▓реА рд╣реИ, рдореИрдВ рддреБрдореНрд╣реЗрдВ рдирд╣реАрдВ рдмрд▓реНрдХрд┐ рдкреНрд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдкрд░ рд╕рд╛рдорд╛рдиреНрдп рдЬрд╛рдВрдЪ рдХрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рд▓рд╛рд╣ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП UIImage
рдбреЗрдЯрд╛ рдХрд┐рд╕реА рдЧреИрд░-рдореМрдЬреВрдж рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХреАред - рдХреЙрдо рд▓реЗрди .. )рдЕрдм рдпрд╣рд╛рдБ рдЬреЛрдбрд╝рдиреЗ рдореЗрдВ рдПрдХ рд╡рд┐рдзрд┐ рд╣реИ LibraryAPI.m : - (void)downloadImage:(NSNotification *)notification {
рдпрд╣рд╛рдБ рд╣реИ рдХрд┐ рдпрд╣ рдХреЛрдб рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ:downloadImage
рдЗрд╕реЗ рдЕрдзрд┐рд╕реВрдЪрдирд╛ рд╕реЗ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ NSNotification
рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ ред рдЗрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗ рдЫрд╡рд┐ рдХрд╛ URL рдФрд░ рдкреЙрдЗрдВрдЯрд░ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ UIImageView
ред- рдпрджрд┐ рд╣рдо
PersistencyManager
рдкрд╣рд▓реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдП рдЧрдП рдереЗ, рддреЛ рд╣рдо рдЗрдореЗрдЬ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдФрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВ ред - рдпрджрд┐ рдЫрд╡рд┐ рдЕрднреА рддрдХ рдЕрдкрд▓реЛрдб рдирд╣реАрдВ рдХреА рдЧрдИ рд╣реИ, рддреЛ рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ
HTTPClient
ред - рдЬрдм рдбрд╛рдЙрдирд▓реЛрдб рдкреВрд░рд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЫрд╡рд┐ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВ
UIImageView
рдФрд░ рдЗрд╕реЗ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рд╕рд╣реЗрдЬреЗрдВред
рд╣рдо рдЕрдиреНрдп рд╡рд░реНрдЧреЛрдВ рд╕реЗ рдЫрд╡рд┐ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЬрдЯрд┐рд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЫрд┐рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд┐рд░ рд╕реЗ рдореБрдЦреМрдЯрд╛ рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЕрдзрд┐рд╕реВрдЪрдирд╛ рдХреЗ рдкреНрд░реЗрд╖рдХ рдХреЛ рд░реБрдЪрд┐ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЫрд╡рд┐ рдХрд╣рд╛рдВ рд╕реЗ рдЖрдИ рд╣реИ: рдЗрдВрдЯрд░рдиреЗрдЯ рд╕реЗ рдпрд╛ рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рд╕реЗредрдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдПрдВ рдФрд░ рдЪрд▓рд╛рдПрдВ, рдФрд░ рдЖрдк рд╣рдорд╛рд░реЗ рдпрд╣рд╛рдВ рд╕реБрдВрджрд░ рдХрд╡рд░ рджреЗрдЦреЗрдВрдЧреЗ HorizontalScroller
:
IOS 9 рдФрд░ рдЙрд╕рд╕реЗ рдКрдкрд░ рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЕрдкрдбреЗрдЯ: рдХреИрд╕реЗ, рдлрд┐рд░ рд╕реЗ рддрд╕реНрд╡реАрд░реЗрдВ рдирд╣реАрдВ рджреЗрдЦреАрдВ? рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд░реЛрдХреЗрдВ рдФрд░ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдЪрд▓рд╛рдПрдВред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЬрдм рдЖрдк рдЗрд╕реЗ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХрд╡рд░ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдореЗрдВ рдХреЛрдИ рджреЗрд░реА рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдмрдЪ рдЧрдП рдереЗред рдЕрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрд┐рдирд╛ рдЗрдВрдЯрд░рдиреЗрдЯ рдХрдиреЗрдХреНрд╢рди рдХреЗ рднреА рдХрд╛рдо рдХрд░реЗрдЧрд╛редрд▓реЗрдХрд┐рди рдЖрдкрдиреЗ рдПрдХ рдмрдЧ рджреЗрдЦрд╛: "рдбреЗрдЬрд╝реА" рдХрддрд╛рдИ рдмрдВрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ! рдХреНрдпрд╛ рдмрд╛рдд рд╣реИ?рдпрд╣ рд╕рд░рд▓ рд╣реИ: рд╣рдордиреЗ рдЫрд╡рд┐ рдХреЛ рд▓реЛрдб рдХрд░рддреЗ рд╕рдордп рд╕рдВрдХреЗрддрдХ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрднреА рддрдХ рдЙрд╕ рддрд░реНрдХ рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ рдЬреЛ рдЫрд╡рд┐ рдХреЛ рд▓реЛрдб рд╣реЛрдиреЗ рдкрд░ рд╕рдВрдХреЗрддрдХ рдХреЛ рд╣рдЯрд╛ рджреЗрдЧрд╛ред рдЫрд╡рд┐ рдЕрдкрд▓реЛрдб рд╣реЛрдиреЗ рдкрд░ рд╣рдо рд╣рд░ рдмрд╛рд░ рдПрдХ рд╕реВрдЪрдирд╛ рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рд╕реБрдВрджрд░ рддрд░реАрдХреЗ рд╕реЗ рдХрд░рддреЗ рд╣реИрдВ: рдХреЗрд╡реАрдУредрдХреБрдВрдЬреА-рдорд╛рди рдЕрд╡рд▓реЛрдХрди (KVO)
рдПрдХ рдЕрдиреБрд╡рд╛рджрдХ рд╕реЗ: рд░реВрд╕реА рдореЗрдВ, рдореБрдЭреЗ рдпрд╣ рд╡рд╛рдХреНрдпрд╛рдВрд╢ рдирд╣реАрдВ рдорд┐рд▓рд╛ред рдЕрд░реНрде: рдХреБрдВрдЬреА-рдореВрд▓реНрдп рдЬреЛрдбрд╝реЗ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдирд╛редKVO рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдПрдХ рд╡рд╕реНрддреБ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрдкрддреНрддрд┐ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реВрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣ рд╕рдХрддреА рд╣реИ - рдЕрдкрдиреА рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рд╡рд╕реНрддреБ рдХреА рд╕рдВрдкрддреНрддрд┐ред рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдПрдкреНрдкрд▓ рдХреЗ рдХреЗрд╡реАрдУ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдЧрд╛рдЗрдб рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд░реНрдгрд┐рдд рд╣реИ редKVO рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ
KVO рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреЛ рдХрд┐рд╕реА рд╕рдВрдкрддреНрддрд┐ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╣рд╛рдВ рд╣рдо KVO рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рд╕реА рдХреНрд▓рд╛рд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдЗрдореЗрдЬ рдкреНрд░реЙрдкрд░реНрдЯреА рдореЗрдВ рдмрджрд▓рд╛рд╡ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░реЗрдВрдЧреЗ UIImageView
ред рдПрд▓реНрдмрдорд╡реНрдпреВрдЦреЛрд▓реЗрдВ рдФрд░ рд▓рд╛рдЗрди рдХреЗ рдареАрдХ рдмрд╛рдж рд╡рд┐рдзрд┐ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдЬреЛрдбрд╝реЗрдВinitWithFrame:albumCover:
[self addSubview:indicator];
[coverImage addObserver:self forKeyPath:@"image" options:0 context:nil];
рд╣рдо рдЬреЛрдбрд╝ рджрд┐рдпрд╛ рд╣реИ self
(рдХрдХреНрд╖рд╛ рд╡рд╕реНрддреБ рд╣реА AlbumView
рдЧреБрдгреЛрдВ рдХреЗ рдПрдХ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рдХреЗ рд░реВрдк рдореЗрдВ) image
рд╡рд╕реНрддреБ рдХреА coverImage
редрдЬрдм рдЖрдкрдХреЛ рдПрд▓реНрдмрдорд╡реНрдпреВ рдореЗрдВ рдкрд╣рд▓реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рдХреА "рд╢рдХреНрддрд┐рдпрд╛рдВ" рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП @end
: - (void)dealloc { [coverImage removeObserver:self forKeyPath:@"image"]; }
рдЕрдВрдд рдореЗрдВ, рдирд┐рдореНрди рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝реЗрдВ: - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { if ([keyPath isEqualToString:@"image"]) { [indicator stopAnimating]; } }
рдкреНрд░рддреНрдпреЗрдХ рдХрдХреНрд╖рд╛ рдореЗрдВ рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдЬреЛ рдПрдХ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рд╣реЛрдЧрд╛ред рдЬрдм "рдЕрд╡рд▓реЛрдХрдиреАрдп" рдЧреБрдг рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╕рд┐рд╕реНрдЯрдо рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдореЗрдВ, рд╣рдо рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдмрджрд▓рдиреЗ рдкрд░ рд╕рдВрдХреЗрддрдХ рдХреЛ рд░реЛрдХрддреЗ рд╣реИрдВ image
ред рдпрд╣реА рд╣реИ, рдареАрдХ рдЙрд╕ рдкрд▓ рдореЗрдВ рдЬрдм рдЫрд╡рд┐ рднрд░реА рд╣реБрдИ рд╣реИред(рдмрд╣реБрдд рдмреБрд░рд╛ рддрд╛рдирд╛рдирд╛, рдореИрдВ рдЪреЗрдХ рд╡рд┐рдХрд▓реНрдк рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ change
, рдЬреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕рдВрд╢реЛрдзрд┐рдд рдЧреБрдгреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╣реИ, рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдерд╛, рддреЛ рдХреЗ рдкреБрд░рд╛рдиреЗ рдФрд░ рдирдП рдореВрд▓реНрдп рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ .. nil
рдФрд░ рдирдпрд╛ рдПрдХ рддрд╕реНрд╡реАрд░ => рдмрдВрдж рдХреИрдореЛрдорд╛рдЗрд▓ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред - .. рдиреЛрдЯ рд▓реЗрди )рдкреНрд░рд╛рд░рдВрдн рдЖрд╡реЗрджрдиред рд╕рдВрдХреЗрддрдХ рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:
рдиреЛрдЯредрд╣рдореЗрд╢рд╛ рдПрдХ рд╡рд┐рдзрд┐ рдореЗрдВ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХреЛрдВ рдХреЛ рд╣рдЯрд╛ рджреЗрдВ dealloc
ред рдЕрдиреНрдпрдерд╛, рдЖрдкрдХрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреНрд░реИрд╢ рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдЬрдм рд╡рд╣ рдХрд┐рд╕реА рдЧреИрд░-рдореМрдЬреВрдж рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рдХреЛ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ!рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕рд╛рде рдереЛрдбрд╝рд╛ рдЦреЗрд▓рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдмрдВрдж рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдзреНрдпрд╛рди рджреЗрдВ: рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рд╕реНрдерд┐рддрд┐ (рдЪрдпрдирд┐рдд рдЕрдВрддрд┐рдо рдПрд▓реНрдмрдо) рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкрд░ рдмрд╣рд╛рд▓ рдирд╣реАрдВ рд╣реИред рдмреЗрд╢рдХ, рдХреНрдпреЛрдВ? :)
рдЗрд╕ "рдЧрд▓рддреА" рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕реВрдЪреА рд╕реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреИрдЯрд░реНрди рдкрд░ рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВ:рдЕрднрд┐рднрд╛рд╡рдХ (рдореЗрдореЗрдВрдЯреЛ)
"рд░рдХреНрд╖рдХ" рд╡рд╕реНрддреБ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдкрдХрдбрд╝рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдмрдЪрд╛рддрд╛ рд╣реИ ... рдХрд╣реАрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕ рдмрдЪрд╛рдпрд╛ рд╕реНрдерд┐рддрд┐ рдХреЛ рдмрд┐рдирд╛ рдПрдирдХреИрдкреНрд╕реБрд▓реЗрд╢рди рдХреЛ рдмрд╣рд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддред рдПрдХ рд╡рд░реНрдЧ рдХреЗ рдирд┐рдЬреА рд╕рджрд╕реНрдп рдирд┐рдЬреА рд░рд╣рддреЗ рд╣реИрдВредрдореЗрдореЗрдВрдЯреЛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджреЛ рддрд░реАрдХреЗ ViewController.m рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ : - (void)saveCurrentState {
рд╡рд┐рдзрд┐ saveCurrentState
рд╡рд░реНрддрдорд╛рди рдПрд▓реНрдмрдо рдХреЗ рд╕реВрдЪрдХрд╛рдВрдХ рдХреЛ рдмрдЪрд╛рддрд╛ рд╣реИред NSUserDefaults
- рдЖрдИрдУрдПрд╕ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдФрд░ рдбреЗрдЯрд╛ рдХрд╛ рдПрдХ рдорд╛рдирдХ рднрдВрдбрд╛рд░рдгредloadPreviousState
рдкрд╣рд▓реЗ рд╕реЗ рд╕рд╣реЗрдЬреЗ рдЧрдП рдЗрдВрдбреЗрдХреНрд╕ рдХреЛ рд▓реЛрдб рдФрд░ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдХреАрдкрд░ рдкреИрдЯрд░реНрди рдХрд╛ рдкреВрд░реНрдг рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕рдХреА рдУрд░ рдмрдврд╝ рд░рд╣реЗ рд╣реИрдВредрдЕрдм рд╕реНрдХреНрд░реЛрд▓рд░ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ ViewController.m рдХреА рд╡рд┐рдзрд┐ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рд╛рдЗрди рдЬреЛрдбрд╝реЗрдВ viewDidLoad
: [self loadPreviousState];
рдпрд╣ рдХреЙрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рдкрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╕рд╣реЗрдЬреЗ рдЧрдП рд╕реНрдЯреЗрдЯ рдХреЛ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИред рд╣рдо рдЖрд╡реЗрджрди рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЛ рдХреИрд╕реЗ рдмрдирд╛рдП рд░рдЦреЗрдВрдЧреЗ? рд╣рдо рдЗрд╕рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рд╕реВрдЪрдирд╛ рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред UIApplicationDidEnterBackgroundNotification
рдРрдк рдХреЗ рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рдореЗрдВ рдЪрд▓реЗ рдЬрд╛рдиреЗ рдкрд░ iOS рдПрдХ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди рднреЗрдЬрддрд╛ рд╣реИ ред рдЬрдм рд╣рдореЗрдВ рдпрд╣ рд╕реВрдЪрдирд╛ рдорд┐рд▓ рдЬрд╛рдПрдЧреА, рд╣рдо рдХреЙрд▓ рдХрд░реЗрдВрдЧреЗ saveCurrentState
ред рдХреНрдпрд╛ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ? рд╣рд╛рдВред
рд╡рд┐рдзрд┐ рдХреЗ рдЕрдВрдд рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрдВрдХреНрддрд┐ рдЬреЛрдбрд╝реЗрдВ viewDidLoad
: [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(saveCurrentState) name:UIApplicationDidEnterBackgroundNotification object:nil];
рдЬрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рд╣реЛрддрд╛ рд╣реИ, рддреЛ ViewController
рдпрд╣ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдХреЙрд▓ рдХрд░рдХреЗ рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЛ рдмрдЪрд╛рдПрдЧрд╛ saveCurrentState
редрдПрдХ рдЕрдиреБрд╡рд╛рджрдХ рд╕реЗ: рдпрд╣ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ iOS 6 рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд╣рд╛рдБ рдЖрдк рдХреЗрд╡рд▓ рдЖрд╡реЗрджрди рдирд╣реАрдВ рд▓реЗ рд╕рдХрддреЗ рдФрд░ рдмрдВрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдк рдХреЗрд╡рд▓ рдкреГрд╖реНрдарднреВрдорд┐ рдХреЛ рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рдмрдВрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ Apple рдЖрдкрдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рддреБрд░рдВрдд рдмрдВрдж рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ? рддреЛ рдХреНрдпрд╛ рдЖрдкрдХрд╛ рддрд░реНрдХ рдЯреВрдЯ рдЬрд╛рдПрдЧрд╛? рдЕрдЧреНрд░рд┐рдо рдореЗрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдирд╛ рдмреЗрд╣рддрд░ рд╣реИ, рдФрд░ iOS 7 рдХреА рд░рд┐рд▓реАрдЬ рдХреЗ рдмрд╛рдж рдирд╣реАрдВред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдХреНрдпреВрдкрд░реНрдЯрд┐рдиреЛ рдореЗрдВ рдЙрдиреНрд╣реЛрдВрдиреЗ рдРрд╕реЗ рджреБрд░реНрднрд╛рдЧреНрдпрдкреВрд░реНрдг рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдкрдЫрддрд╛рд╡рд╛ рджрд┐рдпрд╛ рдЬреЛ рд╕рд╛рдорд╛рдиреНрдп рдЬреНрдЮрд╛рди рдкрд░ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдкреНрд░рдпреЛрдЬреНрдп рдХреЗ рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдкреНрд░рд▓реЗрдЦрди рдХреЗ рд╡рд┐рдкрд░реАрдд, iOS 7.0 рдПрдХ рдЕрдзрд┐рд╕реВрдЪрдирд╛ рднреЗрдЬрддрд╛ рд╣реИ ... DidEnterBackground ... рднрд▓реЗ рд╣реА рдЖрдк рдЗрд╕реЗ рдкреГрд╖реНрдарднреВрдорд┐ рдкрд░ рди рднреЗрдЬреЗрдВ, рд▓реЗрдХрд┐рди рддреБрд░рдВрдд рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдмрдВрдж рдХрд░ рджреЗрдВред рд▓реЗрдХрд┐рди рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдХрд┐рд╕реА рдХреЛ рдУрдПрд╕ рдбреЗрд╡рд▓рдкрд░реНрд╕ рд╕реЗ рдРрд╕реА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рдЙрдореНрдореАрдж рдирд╣реАрдВ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПредрдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХреЛ рддреБрд░рдВрдд рдЬреЛрдбрд╝реЗрдВ: - (void)dealloc { [[NSNotificationCenter defaultCenter] removeObserver:self]; }
ViewController
рд╕реНрдореГрддрд┐ рд╕реЗ рдЙрддрд╛рд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХреЛрдВ рдХреЗ рдмреАрдЪ рд╕реЗ рд╡рд╕реНрддреБ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ редрдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ, рдПрдХ рдПрд▓реНрдмрдо рдкрд░ рдЬрд╛рдПрдВред рдлрд┐рд░ рд╣реЛрдо рдмрдЯрди (рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рдореЗрдВ - andH ) рдкрд░ рдбрдмрд▓-рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдмрдВрдж рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рдорд▓реНрдЯреАрдЯрд╛рд╕реНрдХрд┐рдВрдЧ рд╕реЗ рд╣рдЯрд╛ рджреЗрдВред рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдЪрд▓рд╛рдПрдВ рдФрд░ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдкреБрдирд░рд╛рд░рдВрдн рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЬреЛ
рдПрд▓реНрдмрдо рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛: рдПрд▓реНрдмрдо рдореЗрдВ рдПрд▓реНрдмрдо рдЬрд╛рдирдХрд╛рд░реА TableView
рд╕рд╣реА рд╣реИ, рд▓реЗрдХрд┐рди рдХрд╡рд░ рдХреЛ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рдШреБрдордХреНрдХрдбрд╝ рдореЗрдВ рдЪреБрдирд╛ рдЧрдпрд╛ рд╣реИред рдХреНрдпреЛрдВ?
рдФрд░ рдпрд╣рд╛рдБ рд╡рд┐рдзрд┐ initialViewIndexForHorizontalScroller:
рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИ - рд╣рдорд╛рд░реЗ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рддрд░реАрдХрд╛ред рдЬрдмрдХрд┐ рдЗрд╕реЗ рдХреЗрд╡рд▓ рдкреНрд░рддрд┐рдирд┐рдзрд┐ (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, ViewController
рдкреНрд░рддрд┐рдирд┐рдзрд┐) рдореЗрдВ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред рдЗрд╕рд▓рд┐рдП, рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкрд░ рд╕реНрдХреЛрд░рд░ рд╢реВрдиреНрдп рдкрд░ рд╕реЗрдЯ рд╣реИредрдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, ViewController.m рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝реЗрдВ : - (NSInteger)initialViewIndexForHorizontalScroller:(HorizontalScroller *)scroller { return currentAlbumIndex; }
рдЕрдм рд╕реНрдХреЛрд░рд░ рдЗрдВрдбреЗрдХреНрд╕ (рдХреЗрдВрджреНрд░рд┐рдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдПрд▓реНрдмрдо рдирдВрдмрд░) рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ currentAlbumIndex
ред рдЖрд╡реЗрджрди рдХреЛ рдЕрдзрд┐рдХ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдмрдирд╛рдиреЗ рдХрд╛ рдПрдХ рд╢рд╛рдирджрд╛рд░ рддрд░реАрдХрд╛редрдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓реЙрдиреНрдЪ рдХрд░реЗрдВред рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЧрдИ!
рдпрджрд┐ рдЖрдкрдХреЛ рдХрдХреНрд╖рд╛ рдореЗрдВ рдПрдХ PersistencyManager
рд╡рд┐рдзрд┐ рдорд┐рд▓рддреА рд╣реИ init
, рддреЛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ Album
рдХреЛрдб рдореЗрдВ рд╣рд╛рд░реНрдб рдХреЛрдбрд┐рдд рд╣реИред рдпрд╛рдиреА рдпрд╣ рдХреЛрдб рд╣рд░ рдмрд╛рд░ рдмрдирдиреЗ рдХреЗ рдмрд╛рдж рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ PersistencyManager
ред рд▓реЗрдХрд┐рди рдПрдХ рдмрд╛рд░ рдПрд▓реНрдмрдореЛрдВ рдХреА рд╕реВрдЪреА рдмрдирд╛рдирд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред рд╣рдо рдПрд▓реНрдмрдо рдбреЗрдЯрд╛ рдХреЛ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреИрд╕реЗ рд╕рд╣реЗрдЬрддреЗ рд╣реИрдВ?рдПрдХ рд╡рд┐рдХрд▓реНрдк рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдПрд▓реНрдмрдо рдХреЗ рд╕рднреА рдЧреБрдгреЛрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдирд╛ рд╣реИ, рдЙрдиреНрд╣реЗрдВ рдПрдХ рдкреНрд▓рд┐рд╕реНрдЯ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рд╣реЗрдЬрдирд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ Album
рдЖрд╡рд╢реНрдпрдХрддрд╛рдиреБрд╕рд╛рд░ рдЙрдирд╕реЗ рд╡рд░реНрдЧ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдирд╛ рд╣реИ ред рдпрд╣ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐:- рдЖрдкрдХреЛ рдЧреБрдг рд╕реВрдЪреА рдХреЛ рд╕реАрдзреЗ рдХреЛрдб рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрджрд┐ рдЖрдк рдмрд╛рдж рдореЗрдВ рдЧреБрдгреЛрдВ рдХреЗ рдПрдХ рдЕрд▓рдЧ рд╕реЗрдЯ рдХреЗ рд╕рд╛рде рдПрдХ рдореВрд╡реА рд╡рд░реНрдЧ рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЗрд╕ рдбреЗрдЯрд╛ рдХреЛ рд╕рд╣реЗрдЬрдиреЗ рдФрд░ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирдП рдХреЛрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
- рд╣рдо рдирд┐рдЬреА рдЪрд░ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдирд╣реАрдВ рдмрдЪрд╛ рдкрд╛рдПрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рддреГрддреАрдп-рдкрдХреНрд╖ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИрдВред
рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ Apple [рдкреНрд░рд╢рд╕реНрддрд┐ рдкрддреНрд░ рдХреА рдЬрд░реВрд░рдд] рд╕рдВрдЧреНрд░рд╣ рддрдВрддреНрд░ рдХреЗ рд╕рд╛рде рдЖрдпрд╛ рдерд╛ редрд╕рдВрдЧреНрд░рд╣
Apple рд╕реЗ рдЧрд╛рд░реНрдЬрд┐рдпрди рдкреИрдЯрд░реНрди рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рд╕реЗ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рд╣реИред рдпрд╣ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдПрдХ рдзрд╛рд░рд╛ рдореЗрдВ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдмрд╛рдж рдореЗрдВ рдПрдиреНрдХреИрдкреНрд╕реБрд▓реЗрд╢рди рдХреЛ рддреЛрдбрд╝рдиреЗ рдХреЗ рдмрд┐рдирд╛ рдмрдЪрд╛рдпрд╛ рдФрд░ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддред рдмрд╛рд╣рд░реА рд╡рд░реНрдЧреЛрдВ рдХреЛ рдирд┐рдЬреА рдЧреБрдг рджрд┐рдЦрд╛рдП рдмрд┐рдирд╛ред рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП, рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХрд╛ рд▓реЗрдЦрдХ рд╣рдореЗрдВ рд░реЗ рдбреЗрдВрдбрд░рд▓рд┐рдЪ рдЯреАрдо рд╕реЗ рдПрдХ рдкреБрд╕реНрддрдХ рдпрд╛ рдлрд┐рд░ рд╕реЗ, Apple рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рднреЗрдЬрддрд╛ рд╣реИ редрд╕рдВрдЧреНрд░рд╣ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рдпрд╣ рдШреЛрд╖рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рд╡рд░реНрдЧ Album
рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдпрд╣ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ NSCoding
ред Album.h рдЦреЛрд▓реЗрдВ рдФрд░ рд▓рд╛рдЗрди @interface
рдХреЛ рдЗрд╕рдореЗрдВ рдмрджрд▓реЗрдВ : @interface Album : NSObject <NSCoding>
Album.m рдореЗрдВ рджреЛ рд╡рд┐рдзрд┐рдпрд╛рдБ рдЬреЛрдбрд╝реЗрдВ : - (void)encodeWithCoder:(NSCoder *)aCoder { [aCoder encodeObject:self.year forKey:@"year"]; [aCoder encodeObject:self.title forKey:@"album"]; [aCoder encodeObject:self.artist forKey:@"artist"]; [aCoder encodeObject:self.coverUrl forKey:@"cover_url"]; [aCoder encodeObject:self.genre forKey:@"genre"]; } - (id)initWithCoder:(NSCoder *)aDecoder { self = [super init]; if (self) { _year = [aDecoder decodeObjectForKey:@"year"]; _title = [aDecoder decodeObjectForKey:@"album"]; _artist = [aDecoder decodeObjectForKey:@"artist"]; _coverUrl = [aDecoder decodeObjectForKey:@"cover_url"]; _genre = [aDecoder decodeObjectForKey:@"genre"]; } return self; }
рдХрд┐рд╕реА рд╡рд░реНрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ encodeWithCoder:
ред рдФрд░ рд╡рд┐рдзрд┐ initWithCoder:
рд╕рдВрдЧреНрд░рд╣ рд╕реЗ рдПрд▓реНрдмрдо рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рддрд╛ рд╣реИред рдПрдХ рд╕рд░рд▓ рд▓реЗрдХрд┐рди рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдЙрдкрдХрд░рдгредрдЕрдм рдЬрдм рдХреНрд▓рд╛рд╕ Album
рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ рдЬреЛ рдПрд▓реНрдмрдо рд╕реВрдЪреА рдХреЛ рд╕рд╣реЗрдЬрдирд╛ / рд▓реЛрдб рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрдЧрд╛ред PersistencyManager.h рдХреЗрд▓рд┐рдП рдПрдХ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝реЗрдВ : - (void)saveAlbums;
рдФрд░ PersistencyManager.m рдореЗрдВ рдЗрд╕рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди : - (void)saveAlbums { NSString * filename = [NSHomeDirectory() stringByAppendingString:@"/Documents/albums.bin"]; NSData * data = [NSKeyedArchiver archivedDataWithRootObject:albums]; [data writeToFile:filename atomically:YES]; }
NSKeyedArchiver
рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдПрд▓реНрдмрдо рдХреА рдПрдХ рд╕рд░рдгреА рджреЗрддрд╛ рд╣реИ " albums.bin
"редрдЬрдм рд╣рдо рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдЕрдиреНрдп рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рдЖрд░реНрдХрд╛рдЗрд╡ рд░рд┐рдХрд░реНрд╕рд┐рд╡рд▓реА рдЪрд╛рдЗрд▓реНрдб рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред рд╣рдорд╛рд░рд╛ рд╕рдВрдЧреНрд░рд╣ albums
(рд╡рд╕реНрддреБрдУрдВ рдХреА рд╕рд░рдгреА Album
) рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ ред рдЪреВрдВрдХрд┐ рджреЛрдиреЛрдВ рд╡рд░реНрдЧ NSArray
рдФрд░ Album
рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рд╕рдорд░реНрдерди NSCoding
, рд╕рд░рдгреА рдХреА рд╕рд╛рд░реА рд╕рд╛рдордЧреНрд░реА рд░рд┐рдХрд░реНрд╕рд┐рд╡рд▓реА рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЧрдпрд╛редрдЕрдм PersistencyManager.minit
рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХреЗ рд╕рд╛рде рд╡рд┐рдзрд┐ рдХреЛ рдмрджрд▓реЗрдВ : - (id)init { self = [super init]; if (self) { NSData * data = [NSData dataWithContentsOfFile:[NSHomeDirectory() stringByAppendingString:@"/Documents/albums.bin"]]; albums = [NSKeyedUnarchiver unarchiveObjectWithData:data]; if (albums == nil) { albums = [NSMutableArray arrayWithArray: @[[[Album alloc] initWithTitle:@"Best of Bowie" artist:@"David Bowie" coverUrl:@"https://s3.amazonaws.com/CoverProject/album/album_david_bowie_best_of_bowie.png" year:@"1992"], [[Album alloc] initWithTitle:@"It's My Life" artist:@"No Doubt" coverUrl:@"https://s3.amazonaws.com/CoverProject/album/album_no_doubt_its_my_life_bathwater.png" year:@"2003"], [[Album alloc] initWithTitle:@"Nothing Like The Sun" artist:@"Sting" coverUrl:@"https://s3.amazonaws.com/CoverProject/album/album_sting_nothing_like_the_sun.png" year:@"1999"], [[Album alloc] initWithTitle:@"Staring at the Sun" artist:@"U2" coverUrl:@"https://s3.amazonaws.com/CoverProject/album/album_u2_staring_at_the_sun.png" year:@"2000"], [[Album alloc] initWithTitle:@"American Pie" artist:@"Madonna" coverUrl:@"https://s3.amazonaws.com/CoverProject/album/album_madonna_american_pie.png" year:@"2000"]]]; [self saveAlbums]; } } return self; }
рдЕрдм NSKeyedUnarchiver
рдПрдХ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдПрд▓реНрдмрдо рдбреЗрдЯрд╛ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ, рдпрджрд┐ рдХреЛрдИ рдореМрдЬреВрдж рд╣реИред рдпрджрд┐ рдпрд╣ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ, рддреЛ рд╣рдо рдкрд░реАрдХреНрд╖рдг рдбреЗрдЯрд╛ рд╕реЗ рдПрд▓реНрдмрдо рдмрдирд╛рддреЗ рд╣реИрдВред рдФрд░ рдЕрдЧрд▓реА рдмрд╛рд░ рдЬрдм рдЖрдк рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЙрдиреНрд╣реЗрдВ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рддреБрд░рдВрдд рд╕рд╣реЗрдЬреЗрдВредрд╣рдо рд╣рд░ рдмрд╛рд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ рдЬрд╛рдиреЗ рдкрд░ рдПрд▓реНрдмрдо рдбреЗрдЯрд╛ рдХреЛ рд╕рд╣реЗрдЬрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЖрдк рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдЕрдм рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЖрдк рдмрд╛рдж рдореЗрдВ рдПрд▓реНрдмрдо рдбреЗрдЯрд╛ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ? рдлрд┐рд░ рдЖрдкрдХреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рд╕рднреА рдкрд░рд┐рд╡рд░реНрддрди рд╕рд╣реЗрдЬреЗ рдЧрдП рд╣реИрдВред LibraryAPI.h рдореЗрдВрдПрдХ рдирдИ рд╡рд┐рдзрд┐ рдШреЛрд╖рдгрд╛ рдЬреЛрдбрд╝реЗрдВ : - (void)saveAlbums;
рдпрд╣ рд╣реИ LibraryAPI
, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдпрд╛рдж рдХрд░рддреЗ рд╣реИрдВ, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗрд╡рд╛рдУрдВ рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЗрдВрдЧрд┐рдд рдХрд░реЗрдЧрд╛ PersistencyManager
рдХрд┐ рдЖрдк рдПрд▓реНрдмрдо рдбреЗрдЯрд╛ рдХреЛ рд╕рд╣реЗрдЬрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВредрдФрд░ LibraryAPI.m рдореЗрдВ рдЗрд╕ рдкрджреНрдзрддрд┐ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди : - (void)saveAlbums { [persistencyManager saveAlbums]; }
рдЕрдВрдд рдореЗрдВ, рд╡рд┐рдзрд┐ рдХреЗ рдЕрдВрдд рдореЗрдВ ViewController.m рдХреЗ рд▓рд┐рдП рдирд┐рдореНрди рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ saveCurrentState
: [[LibraryAPI sharedInstance] saveAlbums];
рд╣рдо рд╣рд░ рдмрд╛рд░ рдЗрд╕ ViewController
рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рд╣реЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдПрд▓реНрдмрдо рдХреЛ рд╕рд╣реЗрдЬрддреЗ рд╣реИрдВредрд╕рдм рдХреБрдЫ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡реЗрджрди рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВредрджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рд╕рдВрдЧреНрд░рд╣реАрдд рдбреЗрдЯрд╛ рдХреА рд╡реИрдзрддрд╛ рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред рдЖрдк Documents
рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рдореЗрдВ рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХреЗ рдлрд╝реЛрд▓реНрдбрд░ (рдпрд╛ iExplorer рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░) рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред рд╡рд╣рд╛рдВ рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдПрдХ рдПрд▓реНрдмрдо рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдИ рдЬрд╛ рд░рд╣реА рд╣реИред рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рдЕрдиреНрдп рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЙрдЪрд┐рдд рдбреЗрдЯрд╛ рд╕рдВрд╢реЛрдзрди рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛редрд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣рдм рдкрд░ рд╕рдмрд╕реЗ рд▓рдВрдмреЗ рдЕрдиреБрд╡рд╛рджреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдЖрд╕рд╛рди рдмрдирд╛рддреЗ рд╣реИрдВ: рдкреЙрдк рд╕рдВрдЧреАрдд рдХреЗ рд╡рд┐рд░реЛрдзрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрд▓реНрдмрдо рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдЬреЛрдбрд╝реЗрдВ ред рдФрд░ рдЙрд╕реА рд╕рдордп рд╣рдо рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЛ рд░рджреНрдж рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░реЗрдВрдЧреЗ, рдЕрдЧрд░ рдЕрдЪрд╛рдирдХ рд╣рдордиреЗ рдЧрд▓рддреА рд╕реЗ рдПрд▓реНрдмрдо рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛редрдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд╕реВрдЪреА рдореЗрдВ рдЕрдВрддрд┐рдо рдкреИрдЯрд░реНрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╢рд╛рдирджрд╛рд░ рдЕрд╡рд╕рд░ рд╣реИ: рдЯреАрдоредрдЯреАрдо
рдЯреАрдо - "рдЖрджреЗрд╢" рдХреЗ рдЕрд░реНрде рдореЗрдВ, рдХрдорд╛рдВрдб, рдЯреАрдо рдирд╣реАрдВредрдХрдорд╛рдВрдб рдкреИрдЯрд░реНрди рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдПрдХ рдЕрдиреБрд░реЛрдз рдпрд╛ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ "рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╡рд┐рдзрд┐" рдХрдорд╛рдВрдб рд╣реИ : Forrest->Run(speed, distance);
рдЗрд╕ рдЖрджреЗрд╢ рд╕реЗ рд╣рдо рддреАрди рдЧреБрдгреЛрдВ рд╡рд╛рд▓реА рдПрдХ рд╡рд╕реНрддреБ рдмрдирд╛рддреЗ рд╣реИрдВ:Forrest
;Run
;Array(speed, distance).
рдПрдирдХреИрдкреНрд╕реБрд▓реЗрд╢рди рдПрдХ рдЕрдиреБрд░реЛрдз рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рд▓рдЪреАрд▓рд╛ рдмрдирд╛рддрд╛ рд╣реИ: рдЗрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ, рд╕рд╣реЗрдЬреЗ рдЧрдП, рд╕рдВрд╢реЛрдзрд┐рдд, рдкрдВрдХреНрддрд┐рдмрджреНрдз ... рдЬреБрдЧрд╛рдбрд╝ рдХрд┐рдП рдЧрдП рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдмреАрдЪ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред Apple рд▓рдХреНрд╖реНрдп-рдХреНрд░рд┐рдпрд╛ рддрдВрддреНрд░ рдФрд░ рдордВрдЧрд▓рд╛рдЪрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕ рдкреИрдЯрд░реНрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИредрд▓рдХреНрд╖реНрдп-рдХрд╛рд░реНрдп Apple рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред рдХреЙрд▓ рдХреЗ рд▓рд┐рдП, рдПрдХ рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ NSInvocation
рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд▓рдХреНрд╖реНрдп рд╢рд╛рдорд┐рд▓ рд╣реЛрддрд╛ рд╣реИ (рдЬрд┐рд╕ рдкрд░ рд╕рдВрджреЗрд╢ рднреЗрдЬрд╛ рдЬрд╛рдПрдЧрд╛), рдПрдХ рд╕рдВрджреЗрд╢ рдЪрдпрдирдХрд░реНрддрд╛ рдФрд░ рдХреБрдЫ рдкреИрд░рд╛рдореАрдЯрд░ред рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░, рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред "рдЯреАрдо" рдкреИрдЯрд░реНрди рдХрд╛ рдПрдХ рд╢рд╛рдирджрд╛рд░ рдЙрджрд╛рд╣рд░рдг, рдЬреЛ рд╣рдореЗрдВ рдХреЛрдб рд╕реЗрдкрд░реЗрд╢рди (рдХрдо рдХрдиреЗрдХреНрдЯрд┐рд╡рд┐рдЯреА => рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЕрдзрд┐рдХ рд▓рдЪреАрд▓рд╛рдкрди) рджреЗрддрд╛ рд╣реИред рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рд╡рд╛рд▓реЗ рдХреЛ рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ рд╕реЗ рдЕрд▓рдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЕрдиреБрд░реЛрдз рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИредрдХрдорд╛рдВрдб рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ
рдХреЙрд▓ рддрдВрддреНрд░ рдореЗрдВ рдЧреЛрддрд╛ рд▓рдЧрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд░рджреНрдж рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рддреИрдпрд╛рд░ рдХрд░реЗрдВрдЧреЗред рд╣рдо рдкреВрд░реНрд╡рд╡рдд рд╕реНрдЯреИрдХ рдХреЗ рд▓рд┐рдП UIToolbar
рднреА рдкрд░рд┐рднрд╛рд╖рд┐рдд NSMutableArray
рдХрд░рддреЗ рд╣реИрдВред ViewController.mрдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХреЛ рд╡рд░реНрдЧ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ , рдЬрд╣рд╛рдВ рд╣рдордиреЗ рдЕрдиреНрдп рд╕рднреА рдЪрд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рд╣реИ:ViewController
UIToolbar * toolbar; NSMutableArray * undoStack;
рдпрд╣ рдПрдХ рдЯреВрд▓рдмрд╛рд░ рд╣реЛрдЧрд╛, рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ - рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдмрдЯрди рд╡рд╛рд▓рд╛ рдЯреВрд▓рдмрд╛рд░ред рдФрд░ рдПрдХ рд╕рд░рдгреА рднреА рдЬреЛ рдХрдорд╛рдВрдб рд╕реНрдЯреИрдХ рдХреА рднреВрдорд┐рдХрд╛ рдирд┐рднрд╛рдПрдЧреАред рдЯрд┐рдкреНрдкрдгреА рд╕реЗ рдкрд╣рд▓реЗрд╢реАрд░реНрд╖ рдкрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ viewDidLoad:
" // 2
": toolbar = [[UIToolbar alloc] init]; UIBarButtonItem * undoItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemUndo target:self action:@selector(undoAction)]; undoItem.enabled = NO; UIBarButtonItem * space = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil]; UIBarButtonItem * delete = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemTrash target:self action:@selector(deleteAlbum)]; [toolbar setItems:@[undoItem, space, delete]]; [self.view addSubview:toolbar]; undoStack = [[NSMutableArray alloc] init];
рдпреЗ рд▓рд╛рдЗрдиреЗрдВ рджреЛ рдмрдЯрди рдХреЗ рд╕рд╛рде рдПрдХ рдЯреВрд▓рдмрд╛рд░ рдмрдирд╛рддреА рд╣реИрдВ рдФрд░ рдЙрдирдХреЗ рдмреАрдЪ рдПрдХ рд▓рдЪреАрд▓рд╛ рд╕реНрдерд╛рди (рд╕реНрдХреНрд░реАрди рдХреА рдЪреМрдбрд╝рд╛рдИ рдХреЗ рд▓рд┐рдП рд▓рдЪреАрд▓рд╛ = рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рддрд╛ рд╣реИ)ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣рд╛рдВ рдПрдХ рдЦрд╛рд▓реА рдПрдХреНрд╢рди рд╕реНрдЯреИрдХ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреВрд░реНрд╡рд╡рдд рдХрд░реЗрдВ рдмрдЯрди рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ рдЕрдХреНрд╖рдо рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╕реНрдЯреИрдХ рдЦрд╛рд▓реА рд╣реИредрдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЯреВрд▓рдмрд╛рд░ рдмрд┐рдирд╛ рдлреНрд░реЗрдо рдХреЗ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддред рд╣рдо рдпрд╣рд╛рдВ рдЗрд╕рдХреА рд╕реАрдорд╛рдУрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рд╕реАрдорд╛рдПрдВ viewDidLoad
рдЕрдВрддрд┐рдо рдирд╣реАрдВ рд╣реИрдВред рд╣рдо ViewController
"рдлреНрд░реЗрдорд┐рдВрдЧ" рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЕрдВрддрд┐рдо рд╕реАрдорд╛рдПрдВ рдкрд╛рдПрдВрдЧреЗ ред ViewController.m рдХреЗ рд▓рд┐рдП рдирд┐рдореНрди рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝реЗрдВ : - (void)viewWillLayoutSubviews { toolbar.frame = CGRectMake(0, self.view.frame.size.height - 44, self.view.frame.size.width, 44); dataTable.frame = CGRectMake(0, 130, self.view.frame.size.width, self.view.frame.size.height - 200); }
рдЕрдЧрд▓рд╛, рд╣рдо рдПрд▓реНрдмрдо рдкреНрд░рдмрдВрдзрди рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП ViewController.m рдХреЗ рддреАрди рддрд░реАрдХреЛрдВ рдХреЛ рдЬреЛрдбрд╝реЗрдВрдЧреЗ: рдЕрдВрддрд┐рдо рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЬреЛрдбрд╝реЗрдВ, рд╣рдЯрд╛рдПрдВ рдФрд░ рдкреВрд░реНрд╡рд╡рдд рдХрд░реЗрдВредрдкрд╣рд▓реА рд╡рд┐рдзрд┐ рдПрдХ рдирдпрд╛ рдПрд▓реНрдмрдо рдЬреЛрдбрд╝ рд░рд╣реА рд╣реИ: - (void)addAlbum:(Album *)album atIndex:(int)index { [[LibraryAPI sharedInstance] addAlbum:album atIndex:index]; currentAlbumIndex = index; [self reloadScroller]; }
рдпрд╣рд╛рдВ рд╣рдо рдПрд▓реНрдмрдо рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, "рдЧреЛ" рдЗрд╕рдореЗрдВ (рд╡рд░реНрддрдорд╛рди рд╕реВрдЪрдХрд╛рдВрдХ рд╕реЗрдЯ рдХрд░реЗрдВ) рдФрд░ рд╕реНрдХреЙрд▓рд░ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВредрдЕрдЧрд▓рд╛, рд╣рдЯрд╛рдирд╛: - (void)deleteAlbum {
рдпрд╣рд╛рдВ рдирдИ рджрд┐рд▓рдЪрд╕реНрдк рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВ, рдЖрдЗрдП рдЗрд╕ рдХреЛрдб рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рджреЗрдЦреЗрдВ:- рд╣рдореЗрдВ рд╣рдЯрд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдПрд▓реНрдмрдо рдХрд╛ рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдорд┐рд▓рддрд╛ рд╣реИред
- рдПрдХ рд╡рд┐рдзрд┐ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ (рдХреНрд▓рд╛рд╕ рдСрдмреНрдЬреЗрдХреНрдЯ
NSMethodSignature
) рдмрдирд╛рдПрдБ ред рдФрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╣рдо рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ NSInvocation
рд╣реИрдВ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдбрд┐рд▓реАрдЯ рдСрдкрд░реЗрд╢рди рдХреЛ рд░рджреНрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ - undoDeleteAction
ред
NSInvocation
рддреАрди рдмрд╛рддреЗрдВ рдЬрд╛рдирдиреА рдЪрд╛рд╣рд┐рдП:
- рд▓рдХреНрд╖реНрдп - рдЬрд┐рд╕ рд╡рд╕реНрддреБ рдХреЛ рд╕рдВрджреЗрд╢ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ;
- рдЪрдпрдирдХрд░реНрддрд╛ - рдЬреЛ рд╕рдВрджреЗрд╢ рдкреНрд░реЗрд╖рд┐рдд рдХрд░рдирд╛ рд╣реИ;
- рд╕рдВрджреЗрд╢ рддрд░реНрдХ ред
рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдореЗрдВ рдПрдХ рд╕рдВрджреЗрд╢ рднреЗрдЬрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдбрд┐рд▓реАрдЯ рдСрдкрд░реЗрд╢рди рдХреЗ рд╡рд┐рдкрд░реАрдд рд╣реИред рдЗрд╕рд▓рд┐рдП - рд╣рдЯрд╛рдП рдЧрдП рдПрд▓реНрдмрдо рдХреЛ рд╡рд╛рдкрд╕ рдЬреЛрдбрд╝реЗрдВред - рдЬрдм рд╣рдордиреЗ рдмрдирд╛рдпрд╛ рд╣реИ
undoDeleteAction
, рддреЛ рдЗрд╕реЗ рдПрдХ рдХрд╛рд▓реНрдкрдирд┐рдХ "рд╕реНрдЯреИрдХ" рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ ...
рдРрд╕рд╛ рдХрднреА рди рдХрд░реЗрдВ! рд▓реЗрдЦрдХ рд╕рд░рдгреА рдХреЛ рдПрдХ рд╕реНрдЯреИрдХ рдХрд╣рддрд╛ рд╣реИред рдЬреИрд╕реЗ, "рдХреЛрдб рдкрдврд╝рдиреЗ рд╡рд╛рд▓реЗ рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдХрд▓реНрдкрдирд╛ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╕рд░рдгреА рдПрдХ рд╕реНрдЯреИрдХ рд╣реИ" ... рдПрдХ рд╕реНрдЯреИрдХ рдЪрд╛рд╣рддреЗ рд╣реИрдВ? рджреЛ рдСрдкрд░реЗрд╢рди рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП: push
рдФрд░ pop
ред рд╡рд╣ рд╕рдм рд╣реИред - рдиреЛрдЯ рдкреНрд░рддрд┐ред - рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рд╕реЗ рдПрд▓реНрдмрдо рдирд┐рдХрд╛рд▓реЗрдВ
LibraryAPI
рдФрд░ рд╕реНрдХреЛрд░рд░ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВред - рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдХрд╛рд░реНрд░рд╡рд╛рдИ рд╣реИ рдЬрд┐рд╕реЗ рдкреВрд░реНрд╡рд╡рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдкреВрд░реНрд╡рд╡рдд рдХрд░реЗрдВ рдмрдЯрди рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ред
рдиреЛрдЯредрд╕рд░реНрдХрд┐рдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП NSInvocation
, рдЖрдкрдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдмрд╛рддреЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдирд╛ рд╣реЛрдЧрд╛:- рд╕реВрдЪрдХ рджреНрд╡рд╛рд░рд╛ рддрд░реНрдХ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
- рддрд░реНрдХ рдХреНрд░рдорд╛рдВрдХ рдПрдХ рд╕реВрдЪрдХрд╛рдВрдХ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ
2
ред рд╕реВрдЪрдХрд╛рдВрдХ 0
рдФрд░ 1
рд▓рдХреНрд╖реНрдп рдФрд░ рдЪрдпрдирдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдЖрд░рдХреНрд╖рд┐рдд рд╣реИрдВ ред - рдпрджрд┐ рдХреЛрдИ рдореМрдХрд╛ рд╣реИ рдХрд┐ рддрд░реНрдХреЛрдВ рдХреЛ рд╕реНрдореГрддрд┐ рд╕реЗ рдореБрдХреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП
retainArguments
ред
рдЕрдВрдд рдореЗрдВ, рдкреВрд░реНрд╡рд╡рдд рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝реЗрдВ: - (void)undoAction { if (undoStack.count > 0) { NSInvocation * undoAction = [undoStack lastObject]; [undoStack removeLastObject]; [undoAction invoke]; } if (undoStack.count == 0) { [toolbar.items[0] setEnabled:NO]; } }
рдпрд╣рд╛рдБ рд╣рдо рджреЛ рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реНрдЯреИрдХ рд╕реЗ рдПрдХ рдЖрдЗрдЯрдо рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреА рдирдХрд▓ рджреЗрдЦрддреЗ рд╣реИрдВ: lastObject
+ removeLastObject
ред рдмреЗрд╢рдХ, ViewController
рдореБрдЭреЗ рдРрд╕реА рдЪреАрдЬреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╕реЛрдЪрдирд╛ рдЪрд╛рд╣рд┐рдПред рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╕реНрдЯреИрдХ рдмрдирд╛рдирд╛ рдЗрд╕ рд▓реЗрдЦ рдХреЗ рдЕрдиреБрд╡рд╛рджрдХ рд╕реЗ рдЖрдкрдХрд╛ рд╣реЛрдорд╡рд░реНрдХ рд╣реИредрд╣рдореЗрдВ рд╕реНрдЯреИрдХ рд╕реЗ рдЕрдВрддрд┐рдо рддрддреНрд╡ рдорд┐рд▓рддрд╛ рд╣реИ, рдЗрд╕рдореЗрдВ рд╣рдореЗрд╢рд╛ рдПрдХ рдкреНрд░рдХрд╛рд░ рд╣реЛрддрд╛ рд╣реИ NSInvocation
рдФрд░ рдЗрд╕реЗ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ invoke
ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдордиреЗ рдЬреЛ рдЯреАрдо рдмрдирд╛рдИ рд╣реИ рдЙрд╕реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ (рдПрд▓реНрдмрдо рдХреЛ рд╣рдЯрд╛рддреЗ рд╕рдордп) - рдФрд░ рдпрд╣ рд╣рдЯрд╛рдП рдЧрдП рдПрд▓реНрдмрдо рдХреЛ рд╕реВрдЪреА рдореЗрдВ рд╡рд╛рдкрд╕ рдХрд░ рджреЗрддрд╛ рд╣реИредрд╕реНрдЯреИрдХ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдЖрдЗрдЯрдо рдХреЛ рдЗрд╕рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЖрдкрдХреЛ рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рд╕реНрдЯреИрдХ рдЦрд╛рд▓реА рд╣реИ рдпрд╛ рдирд╣реАрдВред рдпрджрд┐ рдпрд╣ рдЦрд╛рд▓реА рд╣реИ, рддреЛ рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд░рджреНрдж рдХрд░рдиреЗ рдХреА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдирд╣реАрдВ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдкреВрд░реНрд╡рд╡рдд рдХрд░реЗрдВ рдмрдЯрди рдХреЛ рджрдмрд╛рдиреЗ рдкрд░ рд░реЛрдХ рд▓рдЧрд╛рддреЗ рд╣реИрдВ (рдпрд╣ рдЧреНрд░реЗ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ)редрд╣рдорд╛рд░реЗ рд░рджреНрджреАрдХрд░рдг рддрдВрддреНрд░ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдРрдк рд▓реЙрдиреНрдЪ рдХрд░реЗрдВред рдПрдХ рдпрд╛ рджреЛ рдПрд▓реНрдмрдо рд╣рдЯрд╛рдПрдВ рдФрд░ рдЗрд╕рдХреЗ рдкреНрд░рднрд╛рд╡ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реНрд╡рд╡рдд рдХрд░реЗрдВ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ:рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХреЗ рдмреАрдЪ рдПрд▓реНрдмрдо рд╕реВрдЪреА рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╕рд╣реЗрдЬреЗ рдЧрдП рд╣реИрдВ рдпрд╛ рдирд╣реАрдВ, рдпрд╣ рджреЗрдЦрдирд╛ рднреА рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред рдПрд▓реНрдмрдо рдХреЛ рд╣рдЯрд╛рдПрдВ, рдРрдк рдХреЛ рдкреГрд╖реНрдарднреВрдорд┐ рдкрд░ рднреЗрдЬреЗрдВ, рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдорд▓реНрдЯреАрдЯрд╛рд╕реНрдХрд┐рдВрдЧ рд╕реЗ рдмрдВрдж рдХрд░реЗрдВред рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдПрд▓реНрдмрдореЛрдВ рдХреА рд╕реВрдЪреА рдХреЛ рдмрдЪрд╛рдПрдЧрд╛, рдЖрдкрдХреЛ рдЕрдЧрд▓реА рдмрд╛рд░ рд╢реБрд░реВ рд╣реЛрдиреЗ рдкрд░ рдЗрд╕реЗ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдПредрдЖрдЧреЗ рдХреНрдпрд╛ рд╣реИ
рдСрдмреНрдЬреЗрдХреНрдЯрд┐рд╡-рд╕реА рджреЛ рдФрд░ рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реБрдП: рдПрдмреНрд╕рдЯреНрд░реИрдХреНрдЯ рдлрд╝реИрдХреНрдЯрд░реА рдФрд░ рдЬрд╝рд┐рдореНрдореЗрджрд╛рд░реА рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛ ред рдЙрдирдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдирд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдФрд░ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдЖрд╡реЗрджрди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВредрд╣рдордиреЗ рджреЗрдЦрд╛ рдХрд┐ рдкреИрдЯрд░реНрди рдХреНрдпрд╛ рджреЗрддреЗ рд╣реИрдВ: рдЬрдЯрд┐рд▓ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, рд╕рд░рд▓ рд╕рдорд╛рдзрд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рд╣рдордиреЗ рд╕реАрдЦрд╛ рдХрд┐ рд╕рд┐рдВрдЧрд▓рдЯрди, рдПрдорд╡реАрд╕реА, рдкреНрд░рддрд┐рдирд┐рдзрд┐рдордВрдбрд▓, рдкреНрд░реЛрдЯреЛрдХреЙрд▓, рдореБрдЦреМрдЯрд╛, рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ, рд░рдХреНрд╖рдХ рдФрд░ рдЯреАрдо рдХреНрдпрд╛ рд╣реИрдВредрдЖрдкрдХрд╛ рдХреЛрдб рд╢рд┐рдерд┐рд▓ рдпреБрдЧреНрдорд┐рдд рд╣реИ, рдкрдврд╝рдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рд╣реИ, рдкреБрди: рдЙрдкрдпреЛрдЧ рдореЗрдВ рдЖрд╕рд╛рди рд╣реИред рдпрджрд┐ рдХреЛрдИ рдЕрдиреНрдп рдбреЗрд╡рд▓рдкрд░ рдЗрд╕ рдХреЛрдб рдХреЛ рджреЗрдЦрддрд╛ рд╣реИ, рддреЛ рд╡рд╣ рдЬрд▓реНрджреА рд╕реЗ рд╕рдордЭ рдЬрд╛рдПрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ, рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдЧ рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИредрдпрд╣ рдХреЛрдб рдХреА рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рдбрд┐рдЬрд╝рд╛рдЗрди рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИред рдЬрдм рдЖрдк рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддреЗ рд╣реИрдВ, рддреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдХреЛ рдбрд┐рдЬрд╛рдЗрди рдХрд░рдиреЗ рдХреЗ рд╢реБрд░реБрдЖрддреА рдЪрд░рдгреЛрдВ рдореЗрдВ, рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд░рд┐рдлреИрдХреНрдЯрд░рд┐рдВрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪреЗрдВред рдкреИрдЯрд░реНрди рдбреЗрд╡рд▓рдкрд░ рдХреЗ рдЬреАрд╡рди рдХреЛ рдмрд╣реБрдд рдЖрд╕рд╛рди рдмрдирд╛рддреЗ рд╣реИрдВ, рдФрд░ рдХреЛрдб рдмреЗрд╣рддрд░ рд╣реЛрддрд╛ рд╣реИ!
рдЕрдиреБрд╡рд╛рджрдХ рд╕реЗ (рдирд┐рд╖реНрдХрд░реНрд╖ рдХреЗ рдмрдЬрд╛рдп)
рдЖрдЗрдП рд╣рдо рд▓реЗрдЦ рдХреА рд╢реБрд░реБрдЖрдд рдХреЛ рдпрд╛рдж рдХрд░реЗрдВ: рдкреИрдЯрд░реНрди "рдХреНрд░рд┐рд╕реНрдЯреЛрдлрд░ рдЕрд▓реЗрдХреНрдЬреЗрдВрдбрд░" рджреНрд╡рд╛рд░рд╛ рдкрд╣рд▓реА рдмрд╛рд░ "рдкреИрдЯрд░реНрди рднрд╛рд╖рд╛" рдкреБрд╕реНрддрдХ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдкреИрдЯрд░реНрди рдПрдХ рдРрд╕реА рднрд╛рд╖рд╛ рд╣реИ рдЬреЛ рджреЛ рдЪреАрдЬреЛрдВ рдХреЛ рдЬреЛрдбрд╝рддреА рд╣реИ:- рдбреЗрд╡рд▓рдкрд░ рдХрд╛ рдЕрдиреБрднрд╡
- рд╣рдо рдЬреЛ рднрд╛рд╖рд╛ рдмреЛрд▓рддреЗ рдФрд░ рд▓рд┐рдЦрддреЗ рд╣реИрдВред
рдЖрдкрдХреЛ рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдкреИрдЯрд░реНрди рдПрдХ рдЬреАрд╡рд┐рдд рднрд╛рд╖рд╛ рд╣реИ, рдФрд░ рдпрд╣ рдХрд┐ рдкреВрд░реНрдгрддрд╛ рдХреА рдХреЛрдИ рд╕реАрдорд╛ рдирд╣реАрдВ рд╣реИред рдЕрдВрддрд┐рдо рдЕрдзреНрдпрд╛рдп рдореЗрдВ "рд╕реНрдЯреИрдХ" рд╢рдмреНрдж рдЕрдХреНрд╕рд░ рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЛрдб рдореЗрдВ "рд╕реНрдЯреИрдХ" рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдкреНрд░рддрд┐рд╖реНрдард┐рдд рдирд╣реАрдВ рд╣реИред рдпрд╣ рд╡рд╕реНрддреБ рдХреНрдпрд╛ рд╣реИ? рд╕рдВрдкрддреНрддрд┐? рдПрдХ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо?рдЖрдЗрдП рдЖрдкрдХреЛ рдмрддрд╛рддреЗ рд╣реИрдВ рдпрд╣рд╛рдВ рдХрд╛ рдЬрд╡рд╛рдмред рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ, рдпрд╣ рдЬреНрдЮрд╛рди рдХреЛрдб рдореЗрдВ рд╡реНрдпрдХреНрдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ " NSMutableArray
рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдвреЗрд░ рд╣реЛ" рд╡рд╛рдХреНрдпрд╛рдВрд╢ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдорд┐рд▓ рд╕рдХреЗ ред рдХреЛрдб рдФрд░ рдкреНрд░рд▓реЗрдЦрди рдХреЛ рдПрдХ рджреВрд╕рд░реЗ рдХреЛ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдПрдХ рджреВрд╕рд░реЗ рдХреЛ рдкреВрд░рдХ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП ("рдЬреЛ рдХреЛрдб рд╕реЗ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗ рд░рд╣рд╛ рд╣реИ, рдЖрдк рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдкрд╛рдПрдВрдЧреЗ, рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд")редрдкреНрд░рддреНрдпреЗрдХ рдЗрдХрд╛рдИ, рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдЪрд╛рд░ рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдо рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЙрд╕реЗ рдХреЛрдб рдореЗрдВ рдЦреВрдмрд╕реВрд░рддреА рд╕реЗ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рдПрдХ рдмрд╛рд╣рд░реА рд╡реНрдпрдХреНрддрд┐, рдХреЛрдб рдХреЛ рджреЗрдЦрдХрд░, рд╕рд╛рд░ рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рд╕рдордЭ рд╕рдХреЗред тАЬрд╡рд╕реНрддреБ рдХреА рд╡реНрдпрд╡рд╕реНрдерд╛ рдХреИрд╕реЗ рдХреА рдЬрд╛рддреА рд╣реИ? рдХреИрд╕реЗ рдпрд╣ рдЕрдиреНрдп рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рде рд╕реВрдЪрдирд╛ рдХрд╛ рдЖрджрд╛рди рдкреНрд░рджрд╛рди? "- рд╕рд░рд▓ рдФрд░ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдЬрд╡рд╛рдм, рд╡рд╣рд╛рдБ рд╣реИ рдПрдХ рдкреИрдЯрд░реНрдиредрдФрд░ рдЕрдзрд┐рдХред
рд╣рдореЗрд╢рд╛ IDE рд╕реЗ рдЪреЗрддрд╛рд╡рдиреА рдХреЛ рджреЗрдЦреЗрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд┐рдзрд┐ рдХреЛрдб рдореЗрдВ showDataForAlbumAtIndex:
рд╣рдордиреЗ рдПрдХ рдЪреЗрдХ рдХрд┐рдпрд╛ рдерд╛ if (albumIndex < allAlbums.count)
, рд▓реЗрдХрд┐рди рд╣рдордиреЗ рдЗрд╕реЗ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдЬрд╛рдВрдЪрд╛ (albumIndex >= 0)
? рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреЗ рд▓реЗрдЦрдХ рдиреЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╕реЛрдЪрд╛ рдерд╛, рд▓реЗрдХрд┐рди рд╡рд░реНрдЧ рдХреЗ рд░рдЪрдирд╛рдХрд╛рд░реЛрдВ рдиреЗ NSArray
рд╕реЛрдЪрд╛, рдЗрд╕рд▓рд┐рдП AppCode рддреБрд░рдВрдд рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд░рддрд╛ рд╣реИ: рдХреЗ рд╕рд╛рде
рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд int
рдХрд░рдиреЗ рдкрд░ NSUInteger
, рд╣рдореЗрдВ рдПрдХ рд╕реБрд░рдХреНрд╖рд┐рдд рдХреЛрдб рдорд┐рд▓рддрд╛ рд╣реИ - рдмрд┐рдирд╛ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЬрд╛рдВрдЪ рдХреЗ - "рдбрд┐рдЬрд╝рд╛рдЗрди рджреНрд╡рд╛рд░рд╛"редрдкреБрдирд╢реНрдЪ
рдкрд░ рдИ-рдореЗрд▓ рд▓рд┐рдЦреЗрдВ рджреЗрд╡ @
x128 .
рдЖрд░рдпреВ , рдЕрдЧрд░ рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИредрдпрд╣ рд▓реЗрдЦ Apple рдХреЗ рдХреЛрдХреЛ рдбрд┐рдЬрд╝рд╛рдЗрди рдкреИрдЯрд░реНрди рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ , рдЬреЛ рд▓реЗрдЦ рдХреЗ рдЕрдиреБрд╡рд╛рдж рдХреЗ рджреМрд░рд╛рди рдкреБрд░рд╛рдирд╛ рдерд╛:
рдЗрд╕ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЛ рд╕реНрдЯреНрд░реАрдорд▓рд╛рдЗрди рдпреЛрд░ рдРрдк рд╡рд┐рдж рдбрд┐рдЬрд╝рд╛рдЗрди рдкреИрдЯрд░реНрди рдХреЗ рд╕рд░рд▓ рд╡рд┐рд╡рд░рдг рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ , рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рд╕рднреА рд▓рд┐рдВрдХ "рдЧреИрдВрдЧ рдСрдлрд╝ рдлрд╝реЛрд░" рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред "рдореИрдХ рдПрдкреНрд╕ рдбреЗрд╡рд▓рдк рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВ" рдХрд╛ рдирд╛рд░рд╛ рдХрд┐рд╕реА рднреА рдХрд┐рддрд╛рдмреЛрдВ рдХреЗ рдЕрдиреБрдХреВрд▓ рдирд╣реАрдВ рд╣реИ ред рдЖрдк рдПрдХ рджрд┐рди рдореЗрдВ рдПрдХ рдкреБрд╕реНрддрдХ рдирд╣реАрдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВредрд╣рдорд╛рд░рд╛ рдХрд╛рд░реНрдп рдЬрд┐рддрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдСрдмреНрдЬреЗрдХреНрдЯрд┐рд╡-рд╕реА рднрд╛рд╖рд╛ рдореЗрдВ рдПрдХ рдФрд░ **** рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдмрджрд▓рдиреЗ рдХрд╛ рдЕрдЪреНрдЫрд╛ рдореМрдХрд╛ рд╣реИ, рдЬреЛ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓рд┐рдЦрдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╣реИ (рдФрд░ рдпрд╣ рд▓рд╛рдЗрд╡ рдУрдУрдкреА рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╣реИ)ред рдРрд╕рд╛ рд╣реЛрдиреЗ рд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХрдбрд╝реА рдореЗрд╣рдирдд рдХрд░рдиреА рд╣реЛрдЧреАредрдХреНрдпрд╛ рдкрдврд╝рдирд╛ рд╣реИ?