IOS рдХреЗ рд▓рд┐рдП рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ OOP рдкреИрдЯрд░реНрди

рдЕрдиреБрд╡рд╛рджрдХ рд╕реЗ


рд╣рдо рдпрд╣рд╛рдВ рджреЛ рд░реВрд╕реА рднрд╛рд╖реА рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣реЗ рдереЗ - рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рддрд╣рдд рдЖрдИрдУрдПрд╕ рдФрд░ рд╕реА ++ рдкрд░ред рдореИрдВрдиреЗ рджрд░реНрдЬрдиреЛрдВ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдПред рджреЛ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ OOP рдЬреНрдЮрд╛рди рдореЗрдВ рдЕрдВрддрд░ рдмрд╣реБрдд рдмрдбрд╝рд╛ рд╣реИред рд╕реА ++ рдореЗрдВ, рдЖрдорддреМрд░ рдкрд░ рд╕реБрдВрджрд░ рдПрдХреНрд╕реНрдЯреЗрдВрд╕рд┐рдмрд▓ рдХреЛрдб, рдкрд╛рдареНрдпрдХреНрд░рдо рдХреЗ рд░реВрдк рдореЗрдВред рдЙрджреНрджреЗрд╢реНрдп-рд╕реА рдкрд░, рдЪрд┐рддреНрд░ рдирд┐рд░рд╛рд╢рд╛рдЬрдирдХ рд╣реИред рд▓рдЧрднрдЧ рд╕рднреА рдЖрдИрдУрдПрд╕ рдЙрдореНрдореАрджрд╡рд╛рд░реЛрдВ рдХреЛ рдЙрдирдХреА рдирд╛рдХ NSString рдХреЗ рдФрд░ AppDelegate рдкрд░реЗ OOP рдирд╣реАрдВ рдкрддрд╛ рдерд╛ред

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

рдЗрд╕рд▓рд┐рдП, рдореИрдВрдиреЗ рдПрдХ рдкреЛрд╕реНрдЯ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд┐рдпрд╛ рдЬрд┐рд╕рдореЗрдВ iOS рдкрд░ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдбрд┐рдЬрд╛рдЗрди рдкреИрдЯрд░реНрди рдкрд░ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рджреА рдЧрдИ рд╣реИ ... "рдкреНрд░рд╛рд░рдВрднрд┐рдХ"? рд╣рд╛рдБ, рддреЛ рдПрдХ рдЕрдЧрд▓реА рдХрдбрд╝реА рд╣реЛрдЧреА? рдирд╣реАрдВ, рдпрд╣ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдЖрдк рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рдкреНрд░рдпрд╛рд╕реЛрдВ рд╕реЗ рдЕрдиреБрднрд╡ рд╕реЗ рдЖрдЧреЗ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рд╢рд╛рдпрдж рдЗрдорд╛рд░рдд рдХрд╛ рдореБрдЦреМрдЯрд╛ рдЪрд┐рдордиреА рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдПрдХ рд╕рдордЭ рдЖрдПрдЧреА рдХрд┐ рдХреМрди рд╕реА рддрдХрдиреАрдХреЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорджрдж рдХрд░рддреА рд╣реИрдВред

рдЙрдЪреНрдЪ рдЧреБрдгрд╡рддреНрддрд╛ рд╡рд╛рд▓реЗ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд╡рд┐рдХрд╛рд╕ рдПрдХ рд░рдЪрдирд╛рддреНрдордХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИ рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рд┐рд░ рдХреЗ рд▓рд┐рдП рдЕрджреНрд╡рд┐рддреАрдп рд╣реИред рдЗрд╕рд▓рд┐рдП, рдХреЛрдИ рд╕рд╛рдорд╛рдиреНрдп рдирд┐рд░реНрджреЗрд╢ рдирд╣реАрдВ рд╣реИ: if (A and (B or C)) then use Pattern_N;

рдмрд╕ рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдЕрдзрд┐рдХ рдмрд╛рд░ рдкреВрдЫреЗрдВ: рдореИрдВрдиреЗ рдЬреЛ рд▓рд┐рдЦрд╛ рд╣реИ рд╡рд╣ рд╕реБрдВрджрд░ рд╣реИ?

рддреНрдпрд╛рдЧ
рдкреИрдЯрд░реНрди рдПрдХ рд░рд╛рдордмрд╛рдг рдирд╣реАрдВ рд╣реИ, рдХреБрдЯрд┐рд▓ рд╣рд╛рдереЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд▓рд╛рдЬ рдирд╣реАрдВ рд╣реИ, рдФрд░ рджрд┐рдорд╛рдЧ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИред рдпрд╣рд╛рдБ рд╕реНрдЯреИрдВрд╕рд┐рд▓ рд╣реИ:



рд╡рд╣ рдЖрдХрд░реНрд╖рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ! рдЖрдк рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ - рдЖрдкред

рдПрдХ рдкреИрдЯрд░реНрди рдХреНрдпрд╛ рд╣реИ?


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

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



рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдореИрдВ рдкреИрдЯрд░реНрди рдХреЛ "рдЯреЗрдореНрдкрд▓реЗрдЯ" рдирд╣реАрдВ рдХрд╣реВрдВрдЧрд╛, рдЗрд╕рд▓рд┐рдП рд╕реА ++ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рд╕рд╛рде рднреНрд░рдорд┐рдд рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреЛ рдХрд┐ рдЙрджреНрджреЗрд╢реНрдп рд╕реА рдореЗрдВ рдЬреАрд╡рди рдХрд╛ рдЕрдзрд┐рдХрд╛рд░ рднреА рд╣реИред

рдпрд╣ рдкрд░рд┐рдЪрдп рд╕рдорд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЕрдВрдд рдореЗрдВ рд▓реЗрдЦ рдХреЗ рд▓реЗрдЦрдХ рдХреЛ рдлрд░реНрд╢ рд╕реЗ рдЧреБрдЬрд░рддрд╛ рд╣реИред - рдиреЛрдЯ рдкреНрд░рддрд┐ред :)

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдирд╣реАрдВ, рдкреИрдЯрд░реНрди рдХреЗ рдорд╣рддреНрд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдФрд░ рд╡рд┐рд╖рдпрд╛рдВрддрд░ред
... рдпрд╛рддреНрд░реА рдЧрд▓реА рд╕реЗ рдЪрд▓реЗ рдФрд░ рдЦреБрдж рдХреЛ рдЙрд╕ рдХреНрд╡рд╛рд░реНрдЯрд░ рдореЗрдВ рдкрд╛рдпрд╛, рдЬреЛ рд╕реНрддрдВрднреЛрдВ рд╡рд╛рд▓реЗ рдШрд░реЛрдВ рдХреЗ рд╕рд╛рде рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдХреЙрд▓рдо рд╕реАрдзреЗ рдФрд░ рдШреБрдорд╛рд╡рджрд╛рд░ рджреЛрдиреЛрдВ рдереЗ, рдФрд░ рдореБрдбрд╝, рдФрд░ рдореБрдбрд╝, рдФрд░ рд╕рд░реНрдкрд┐рд▓, рдФрд░ рддрд┐рд░рдЫреЗ, рдФрд░ рдЪрдкрдЯреЗ, рдФрд░ рддрд┐рд░рдЫреЗ, рдФрд░ рдкреИрдирдХреЗрдХ рдЬреИрд╕реЗ, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд┐рдирдХрд╛ рдЖрдкрдХреЛ рдирд╛рдо рдирд╣реАрдВ рдорд┐рд▓ рд░рд╣рд╛ рд╣реИред рдШрд░реЛрдВ рдХреЗ рдИрдЧрд▓ рднреА рд╕реАрдзреЗ рдереЗ, рдФрд░ рддрд┐рд░рдЫреЗ, рдФрд░ рдШреБрдорд╛рд╡рджрд╛рд░, рдФрд░ рдЯреВрдЯреЗ рд╣реБрдП, рдФрд░ рдЬрд╝рд┐рдЧрдЬрд╝реИрдЧред рдХреБрдЫ рдШрд░реЛрдВ рдореЗрдВ, рд╕реНрддрдВрдн рдиреАрдЪреЗ рдирд╣реАрдВ рдереЗ, рдЬреИрд╕рд╛ рдХрд┐ рдЕрдкреЗрдХреНрд╖рд┐рдд рдерд╛, рд▓реЗрдХрд┐рди рдКрдкрд░ рд╕реЗ, рдЫрддреЛрдВ рдкрд░; рдЕрдиреНрдп рдШрд░реЛрдВ рдХреЗ рд╕реНрддрдВрдн рдиреАрдЪреЗ рдереЗ, рд▓реЗрдХрд┐рди рдордХрд╛рди рд╕реНрд╡рдпрдВ рд╕реНрддрдВрднреЛрдВ рдХреЗ рдКрдкрд░, рдКрдкрд░ рдЦрдбрд╝реЗ рдереЗ; рддреАрд╕рд░реЗ рдореЗрдВ, рд╕реНрддрдВрднреЛрдВ рдХреЛ рдХреЙрд░реНрдирд┐рд╕ рд╕реЗ рдирд┐рд▓рдВрдмрд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдФрд░ рд░рд╛рд╣рдЧреАрд░реЛрдВ рдХреЗ рд╕рд┐рд░ рдкрд░ рд▓рдЯрдХ рдЧрдПред рдиреАрдЪреЗ рдПрдХ рдХрдВрдЧрдиреА рдХреЗ рд╕рд╛рде рдПрдХ рдШрд░ рдерд╛, рдФрд░ рд╕реНрддрдВрдн рдЙрд▓реНрдЯрд╛ рдЦрдбрд╝рд╛ рдерд╛ рдФрд░, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ рддрд░рдл squintedред рд╕реНрддрдВрднреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдШрд░ рднреА рдерд╛, рдЬреЛ рд╕реАрдзрд╛ рдЦрдбрд╝рд╛ рдерд╛, рд▓реЗрдХрд┐рди рдШрд░ рдЦреБрдж рд╕реЗ рдкреВрдЫрддреЗ рдереЗ, рдЬреИрд╕реЗ рдХрд┐ рд░рд╛рд╣рдЧреАрд░реЛрдВ рдХреЗ рд╕рд┐рд░ рдкрд░ рдЧрд┐рд░рдирд╛ред рдПрдХ рдШрд░ рдРрд╕рд╛ рднреА рдерд╛ рдЬрд╣рд╛рдБ рд╕реНрддрдВрдн рдПрдХ рддрд░рдл рдЭреБрдХрддреЗ рдереЗ рдФрд░ рдШрд░ рджреВрд╕рд░реЗ рдХреЛ рдЭреБрдХрддрд╛ рдерд╛, рдЬрд┐рд╕рд╕реЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рдерд╛ рдХрд┐ рдпрд╣ рд╕рдм рдЕрдм рдЬрдореАрди рдкрд░ рдЧрд┐рд░ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдзреВрд▓ рдореЗрдВ рдЧрд┐рд░ рдЬрд╛рдПрдЧрд╛ред

рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЯ рдХреБрдмрд┐рдХ рдиреЗ рдХрд╣рд╛, "рдЖрдк рдЗрди рддрд┐рд░рдЫреЗ рдШрд░реЛрдВ рдХреЛ рдирд╣реАрдВ рджреЗрдЦреЗрдВрдЧреЗред" - рдПрдХ рдмрд╛рд░, рдпрд╣ рдЙрди рдШрд░реЛрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдлреИрд╢рди рдерд╛ рдЬреЛ рдХреБрдЫ рднреА рдирд╣реАрдВ рджрд┐рдЦрддреЗ рдереЗред рддреЛ рдЙрдиреНрд╣реЛрдВрдиреЗ рдРрд╕рд╛ рдЕрдкрдорд╛рди рдХрд┐рдпрд╛ рдХрд┐ рдЕрдм рддреЛ рд╢рд░реНрдо рднреА рдЖрддреА рд╣реИ!

рдПрдиред рдиреЛрд╕реЛрд╡ред "рд╕реМрд░ рд╢рд╣рд░ рдореЗрдВ рдбрдиреЛ"




рд╣рд╛рд▓рд╛рдВрдХрд┐ рдХрдИ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЗрд╕ рдмрд╛рдд рд╕реЗ рд╕рд╣рдордд рд╣реИрдВ рдХрд┐ рдкреИрдЯрд░реНрди рдХрд╛ рд╡рд┐рд╖рдп рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдзрд┐рдХ рд▓реЗрдЦ рд╕рдорд░реНрдкрд┐рдд рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рд╣рдо рдЕрдХреНрд╕рд░ рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╕рдордп рдкреИрдЯрд░реНрди рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВред

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

рдпрджрд┐ рдЖрдк рдбрд┐рдЬрд╛рдЗрди рдкреИрдЯрд░реНрди рдХреЗ рд╡рд┐рд╖рдп рдореЗрдВ рдирдП рд╣реИрдВ, рддреЛ рдореЗрд░реЗ рд▓рд┐рдП рдЖрдкрдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫреА рдЦрдмрд░ рд╣реИ! рдкрд╣рд▓рд╛: рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЙрди рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рдЬреЛ рдХреЛрдХреЛ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред (рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ Apple рдХреЛ рдбреЗрд╡рд▓рдкрд░.apple.com рдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рдЬрд▓реНрджреА рдХреЛрдб рд╕реЗ рдирд╣реАрдВ рд░реЛрдХрддрд╛ рд╣реИ - рдиреЛрдЯ рдкреНрд░рддрд┐ред ) рджреВрд╕рд░рд╛: рдпрд╣ рд▓реЗрдЦ рдЖрдкрдХреЛ рдореВрд▓ (рдФрд░ рди рдХреЗрд╡рд▓ рдореВрд▓) рдбрд┐рдЬрд╛рдЗрди рдкреИрдЯрд░реНрди рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдХрд░рд╛рдПрдЧрд╛ рдЬреЛ рдЖрдорддреМрд░ рдкрд░ рдХреЛрдХреЛ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред

рдкреНрд░рддреНрдпреЗрдХ рдкреИрдЯрд░реНрди рдХреЗ рд▓рд┐рдП, рд╣рдо рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ:

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

рдкреАрдврд╝реАрдЧрдд рдкреИрдЯрд░реНрди (рд╕реГрдЬрдирд╛рддреНрдордХ) рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдЙрд╕ рддрд░рд╣ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рд╡рд╕реНрддреБрдПрдБ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИрдВ:

рд╕рдВрд░рдЪрдирд╛рддреНрдордХ рдкреИрдЯрд░реНрди рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдмреАрдЪ рд╕рдВрдмрдВрдзреЛрдВ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░рдиреЗ рдХреЗ рд╕рд░рд▓ рддрд░реАрдХреЛрдВ рдХреА рддрд▓рд╛рд╢ рдХрд░рддреЗ рд╣реИрдВ:

рд╡реНрдпрд╡рд╣рд╛рд░ рдкреИрдЯрд░реНрди (рд╡реНрдпрд╡рд╣рд╛рд░) рдмрд╛рддрдЪреАрдд рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдмреАрдЪ "рд╕рдВрдЪрд╛рд░":

рд▓реЗрдЦ рдХреЗ рдЕрдВрдд рддрдХ, рд╣рдорд╛рд░рд╛ рдЖрд╡реЗрджрди рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛:



рд╢реБрд░реБрдЖрдд рд╣реЛ рд░рд╣реА рд╣реИ


рдЕрдкрдиреЗ рдкрд╕рдВрджреАрджрд╛ 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) { //   : self.backgroundColor = [UIColor blackColor]; //      - 5   : coverImage = [[UIImageView alloc] initWithFrame:CGRectMake(5, 5, frame.size.width-10, frame.size.height-10)]; [self addSubview:coverImage]; //   : indicator = [[UIActivityIndicatorView alloc] init]; indicator.center = self.center; indicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyleWhiteLarge; [indicator startAnimating]; [self addSubview:indicator]; } return self; } @end 

рдкрд╣рд▓реА рдЪреАрдЬ рдЬреЛ рдЖрдкрдХреЛ coverImage рдЪрд╛рд╣рд┐рдП, рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЪрд░ рд╣реИ: coverImage ред рдпрд╣ рд╡реЗрд░рд┐рдПрдмрд▓ рдПрдХ рдХрд╡рд░ рдПрд▓реНрдмрдо рдЗрдореЗрдЬ рд╣реИред рджреВрд╕рд░рд╛ indicator рдЪрд░ рдПрдХ рд╕рдВрдХреЗрддрдХ рд╣реИ рдЬреЛ рдШреВрдорддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдЧрддрд┐рд╡рд┐рдзрд┐ рд▓реЛрдб рдХрд░рддреЗ рд╕рдордп рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреЛ рджрд░реНрд╢рд╛рддреА рд╣реИред

рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдлрд╝рд╛рдЗрд▓ ( *.m ) рдореЗрдВ рдпреЗ рдЪрд░ рдХреНрдпреЛрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓ ( *.h ) рдореЗрдВ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ? рдХреНрдпреЛрдВрдХрд┐ рдЕрдиреНрдп рд╡рд░реНрдЧреЛрдВ ( AlbumView рдмрд╛рд╣рд░) рдХреЛ рдЗрди рдЪрд░реЛрдВ рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рдХрдХреНрд╖рд╛ рдХреЗ рдЕрдВрджрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдЕрдиреНрдп рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЗрдмреНрд░реЗрд░реА (рдпрд╛ рдлреНрд░реЗрдорд╡рд░реНрдХ) рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ рддреЛ рдпрд╣ рдмрд┐рдВрджреБ рдмреЗрд╣рдж рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред

рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ (theB) - рдмрд╕ рдПрдХ рдЪреЗрдХред рдХреНрдпрд╛ рд╕рдм рдареАрдХ рд╣реИ? рдлрд┐рд░ рддреИрдпрд╛рд░ рд╣реЛ рдЬрд╛рдУ: рдЖрдкрдХрд╛ рдкрд╣рд▓рд╛ рдкреИрдЯрд░реНрди!

рдПрдорд╡реАрд╕реА - рдкреИрдЯрд░реНрди рдХрд╛ рд░рд╛рдЬрд╛




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

рддреАрди рднреВрдорд┐рдХрд╛рдПрдБ:


рдПрдорд╡реАрд╕реА рдкреИрдЯрд░реНрди рдХреЗ рд╕рд╣реА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдЖрд╡реЗрджрди рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рд╡рд╕реНрддреБ рдЗрди рд╕рдореВрд╣реЛрдВ рдореЗрдВ рд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рдореЗрдВ рдЖрддреА рд╣реИред



рдпрд╣ рд╕рдм рдХреНрдпреЛрдВ рд╣реИ? рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдлреЗрдВрдХреЗрдВ, рдФрд░ рдПрдХ рдХрдХреНрд╖рд╛ рдореЗрдВ рдкреНрд░рд╕реНрддреБрддрд┐ рдХреЗ рд╕рд╛рде рдореЙрдбрд▓ рдХреЛ рдорд┐рд▓рд╛рдПрдВ? рдпрд╣ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рдПрдЧрд╛!

рд╕рд╡рд╛рд▓ рджреЛ (рдкрд░рд╕реНрдкрд░) рдЪреАрдЬреЛрдВ рдХреЗ рдиреАрдЪреЗ рдЖрддрд╛ рд╣реИ:
  1. рдХреЛрдб рдЬреБрджрд╛рдИ;
  2. рдХреЛрдб рдкреБрди: рдЙрдкрдпреЛрдЧ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ред

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

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╣рдо рдЕрдкрдиреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдлрд┐рд▓реНрдореЛрдВ рдпрд╛ рдкреБрд╕реНрддрдХреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо рдЕрднреА рднреА рдореВрд╡реА рдФрд░ рдмреБрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП AlbumView рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ! рдФрд░ рдЕрдЧрд░ рд╣рдо рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреЛ рдПрд▓реНрдмрдореЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдЧрд╛, рд╣рдо рдЗрд╕рдореЗрдВ Album рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдпрд╣ рдПрдХ рдореЙрдбрд▓ рд╣реИ рдЬреЛ рдкреНрд░рд╕реНрддреБрддрд┐ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд╣реИред рдпрд╣ MVC рдХреА рд╢рдХреНрддрд┐ рд╣реИ!

MVC рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ


1. рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдЧ рдПрдХ рдореЙрдбрд▓, рдирд┐рдпрдВрддреНрд░рдХ рдпрд╛ рджреГрд╢реНрдп рд╣реИред рдПрдХ рд╡рд░реНрдЧ рджреЛ рднреВрдорд┐рдХрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝ рдирд╣реАрдВ рд╕рдХрддрд╛ рд╣реИ! рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рджреЛ рдХрдХреНрд╖рд╛рдПрдВ рдмрдирд╛рдХрд░ рдкрд╣рд▓рд╛ рдХрджрдо рдЙрдард╛рдпрд╛ рд╣реИ: Album рдФрд░ Album AlbumView ред

2. рдЖрдк рдбреЗрд╡рд▓рдкрд░.apple.com рдкрд░ рджреЗрдЦреЗ рдЧрдП рдЖрддрдВрдХ рдХреЛ рднреВрд▓ рдЬрд╛рдПрдВ! рд╣рд╛рдВ, рд╡реЗ рдЙрджрд╛рд╣рд░рдг рдЬрд╣рд╛рдВ ViewController рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рджреЛ рдпрд╛ рддреАрди рднреВрдорд┐рдХрд╛рдПрдВ рдирд┐рднрд╛рддреЗ рд╣реИрдВред - рдиреЛрдЯ рдкреНрд░рддрд┐ред

3. рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рддреАрди рд╕рдореВрд╣ рдмрдирд╛рдПрдВ - Model , View рдФрд░ Controller :



рдпрд╣ рдХреИрд╕реЗ рдХрд░реЗрдВ:

  1. рдлрд╝рд╛рдЗрд▓> рдирдпрд╛> рд╕рдореВрд╣ (рдпрд╛ рдХреАрдмреЛрд░реНрдб рд╕реЗ: рдРрдкрдХреЛрдб тМШтМеN> рд╕рдореВрд╣ рдореЗрдВ Xcode inN рдореЗрдВ), рд╕рдореВрд╣ Model рдирд╛рдо рджреЗрдВред Controller рдФрд░ View рд▓рд┐рдП рдПрдХ рд╣реА рдСрдкрд░реЗрд╢рди рдХрд░реЗрдВред
  2. 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 { // 1 static LibraryAPI * _sharedInstance = nil; // 2 static dispatch_once_t oncePredicate; // 3 dispatch_once(&oncePredicate, ^{ _sharedInstance = [[LibraryAPI alloc] init]; }); return _sharedInstance; } 

рдЗрд╕ рдЫреЛрдЯреА рд╕реА рд╡рд┐рдзрд┐ рдореЗрдВ рдмрд╣реБрдд рд╕реА рд░реЛрдЪрдХ рдмрд╛рддреЗрдВ рд╣реЛрддреА рд╣реИрдВ:

  1. рд╣рдо рдкреЙрдЗрдВрдЯрд░ рдХреЛ рдХрдХреНрд╖рд╛ рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдерд┐рд░ рдЪрд░ рдШреЛрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ (рдЗрд╕рдХрд╛ рдореВрд▓реНрдп рд╣рдорд╛рд░реА рдХрдХреНрд╖рд╛ рд╕реЗ рд╡рд┐рд╢реНрд╡ рд╕реНрддрд░ рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧрд╛)ред
  2. рд╣рдо рдПрдХ рд╕реНрдерд┐рд░ рд╡реИрд░рд┐рдПрдмрд▓ рдбрд┐рд╕реНрдкреИрдЪ_рдСрдирд╕реЗ_рдЯреА рдШреЛрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдЧрд╛ рдХрд┐ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЛрдб рдХреЛ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
  3. рдЧреНрд░реИрдВрдб рд╕реЗрдВрдЯреНрд░рд▓ рдбрд┐рд╕реНрдкреИрдЪ (рдЬреАрд╕реАрдбреА) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо 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; //    } @end 

рдпрд╣ рд╡рд░реНрдЧ рд╡рд┐рд╕реНрддрд╛рд░ рдПрдХ рд╡рд░реНрдЧ рдореЗрдВ рдирд┐рдЬреА рддрд░реАрдХреЛрдВ рдФрд░ рдЪрд░ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рд╣реИ рддрд╛рдХрд┐ рдмрд╛рд╣рд░реА рд╡рд░реНрдЧреЛрдВ рдХреЛ рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рди рдЪрд▓реЗред рдпрд╣рд╛рдВ рд╣рдо рдПрдХ рдРрд░реЗ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдПрд▓реНрдмрдо рдбреЗрдЯрд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рд╕рд░рдгреА рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдПрд▓реНрдмрдореЛрдВ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдЬреЛрдбрд╝ рдФрд░ рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред

рдЕрдм @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]}; } 

рдЬрд░рд╛ рд╕реЛрдЪреЛ рдХрд┐ рдкреИрдЯрд░реНрди рдХрд┐рддрдирд╛ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╣реИ:

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]; // 1 self.view.backgroundColor = [UIColor colorWithRed:0.76f green:0.81f blue:0.87f alpha:1.f]; currentAlbumIndex = 0; // 2 allAlbums = [[LibraryAPI sharedInstance] albums]; // 3 // UITableView,     CGRect frame = CGRectMake(0.f, 120.f, self.view.frame.size.width, self.view.frame.size.height - 120.f); dataTable = [[UITableView alloc] initWithFrame:frame style:UITableViewStyleGrouped]; dataTable.delegate = self; dataTable.dataSource = self; dataTable.backgroundView = nil; [self.view addSubview:dataTable]; } 

рдЗрд╕ рд╡рд┐рдзрд┐ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
  1. рдкреГрд╖реНрдарднреВрдорд┐ рдХрд╛ рд░рдВрдЧ рдЧрд╣рд░реЗ рдиреАрд▓реЗ рд░рдВрдЧ рдореЗрдВ рд╕реЗрдЯ рдХрд░реЗрдВред
  2. рдПрдкреАрдЖрдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рднреА рдПрд▓реНрдмрдореЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред рд╣рдореЗрдВ PersistencyManagerрд╕реАрдзреЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ !
  3. рдмрдирд╛рдПрдБ UITableViewред рд╣рдо рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░рд╛ ViewControllerрдкреНрд░рддрд┐рдирд┐рдзрд┐ рдФрд░ рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рд╣реИ UITableView, рдЗрд╕рд▓рд┐рдП рдЬреЛ рднреА рдЬрд╛рдирдХрд╛рд░реА рдЖрд╡рд╢реНрдпрдХ рд╣реИ, UITableViewрд╡рд╣ ViewController'рдУрдо' рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЬрд╛рдПрдЧреА ред

рдЕрдм ViewController.m рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝реЗрдВ :

 - (void)showDataForAlbumAtIndex:(int)albumIndex { //   : ,       if (albumIndex < allAlbums.count) { //  : Album * album = allAlbums[albumIndex]; //   ,     TableView: currentAlbumData = [album tr_tableRepresentation]; } else { currentAlbumData = nil; } //    ,   .  TableView [dataTable reloadData]; } 

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> //     @end 

рдЗрд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рд╣рдо рдПрдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ HorizontalScrollerDelegate- рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╕реЗ рдПрдХ NSObjectрд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо (рдЙрд╕реА рддрд░рд╣ рдЬреИрд╕реЗ рдХрд┐ рдХрдХреНрд╖рд╛рдПрдВ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА рд╣реИрдВ)ред рд╕рд╛рдорд╛рдиреНрдп рдЕрднреНрдпрд╛рд╕ рдПрдХ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ NSObjectрдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдХрд┐ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рд▓рд┐рдП рд╡рд┐рд░рд╛рд╕рдд / рдЕрдиреБрд░реВрдк рд╣реЛрддрд╛ рд╣реИ NSObjectред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдо NSObjectрдЕрдкрдиреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗ HorizontalScrollerред рд╣рдо рдЬрд▓реНрдж рд╣реА рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдпрд╣ рдХреНрдпреЛрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред

рд╣рдо рдЖрд╡рд╢реНрдпрдХ рдФрд░ рд╡реИрдХрд▓реНрдкрд┐рдХ рддрд░реАрдХреЛрдВ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреЗ рдмреАрдЪ @protocolрдФрд░ @end:

 @required //  ,        - (NSInteger)numberOfViewsForHorizontalScroller:(HorizontalScroller *)scroller; //       <index> - (UIView *)horizontalScroller:(HorizontalScroller *)scroller viewAtIndex:(int)index; //         <index> - (void)horizontalScroller:(HorizontalScroller *)scroller clickedViewAtIndex:(int)index; @optional //  ,       // ( ,   0,     ) - (NSInteger)initialViewIndexForHorizontalScroller:(HorizontalScroller *)scroller; 

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

рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╡рд┐рдзрд┐ рдкреНрд░рд╛рд░рдВрдн рддрддреНрд╡ рдХрд╛ рд╕реВрдЪрдХрд╛рдВрдХ рд╣реИред рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ 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" // 1 #define VIEW_PADDING 10 #define VIEW_DIMENSIONS 100 #define VIEWS_OFFSET 100 // 2 @interface HorizontalScroller () <UIScrollViewDelegate> @end // 3 @implementation HorizontalScroller { UIScrollView * scroller; } @end 

рдЙрди рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдЬреЛ рд╣рдо рдХрд░рддреЗ рд╣реИрдВ:
  1. рд╣рдо рд╡рд┐рдХрд╛рд╕ рдХреЗ рд╕реНрддрд░ рдкрд░ рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╕рдВрд╢реЛрдзрди рдХреЗ рд▓рд┐рдП рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рд╕реНрдХреНрд░реЙрд▓ рдХреЗ рдЕрдВрджрд░ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЗ рдЖрдпрд╛рдо 100x100 рдЕрдВрдХ рд╣реЛрдВрдЧреЗ, рдЬреЛ рдЖрдпрдд рд╕реЗ 10 рдмрд┐рдВрджреБрдУрдВ рдХреЗ рдПрдХ рдЗрдВрдбреЗрдВрдЯ рдХреЗ рд╕рд╛рде рдЙрдиреНрд╣реЗрдВ рдлрд╝реНрд░реЗрдо рдХрд░рддреЗ рд╣реИрдВред
    (рдкреЙрдЗрдВрдЯреНрд╕ рдкрд┐рдХреНрд╕рд▓ рдХреЗ рд╕рд╛рде рднреНрд░рдорд┐рдд рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ! IOS рдбреНрд░реЙрдЗрдВрдЧ рдХреЙрдиреНрд╕реЗрдкреНрдЯреНрд╕ рдореЗрдВ рдПрдХ рдкреЙрдЗрдВрдЯ рд╡рд░реНрд╕реЗрд╕ рдкрд┐рдХреНрд╕рд▓ рд╕реЗрдХреНрд╢рди рд╣реИ ) ред
  2. рд╣реЙрд░рд┐рдЬрд╝реЙрдиреНрдЯрд▓рд╕рдХреНрд░реЙрд▓рд░ рдХреНрд▓рд╛рд╕ UIScrollViewDelegate рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рд╣реЙрд░рд┐рдЬрд╝реЙрдиреНрдЯрд▓рд╕рдХреНрд░реЙрд▓рд░ рдПрд▓реНрдмрдо рдЖрд░реНрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдХреНрд░реЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП UIScrollView рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдШрдЯрдирд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдирд╛ рд╣реЛрдЧрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗ рд╕реНрдХреНрд░реЙрд▓ рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рд╣реИред
  3. рджрд░рдЕрд╕рд▓, рд╣рдо рдПрдХ рд╕реНрдХреНрд░реЙрд▓ рджреГрд╢реНрдп рдмрдирд╛рддреЗ рд╣реИрдВред

рдЖрдЧреЗ рд╣рдореЗрдВ рдПрдХ рдЖрд░рдВрднреАрдХрд░рдг рд╡рд┐рдзрд┐ рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

 - (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]; //   enumerator, ..      . //      subviews,   : for (int index = 0; index < [self.delegate numberOfViewsForHorizontalScroller:self]; index++) { UIView * view = scroller.subviews[index]; if (CGRectContainsPoint(view.frame, location)) { [self.delegate horizontalScroller:self clickedViewAtIndex:index]; CGPoint offset = CGPointMake(view.frame.origin.x - self.frame.size.width/2 + view.frame.size.width/2, 0); [scroller setContentOffset:offset animated:YES]; break; } } } 

gestureрдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд "рдЗрд╢рд╛рд░рд╛" ( ) рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реЗ , рдЖрдк рд╕реНрдерд┐рддрд┐ рдХреЛ рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ ( locationInView:)ред

рддрдм рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдкрджреНрдзрддрд┐ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ numberOfViewsForHorizontalScroller:ред рдЙрджрд╛рд╣рд░рдг HorizontalScrollerрдореЗрдВ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рд╣реИ, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдЖрдк рдЙрд╕реЗ рдпрд╣ рд╕рдВрджреЗрд╢ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВ (рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЕрдиреБрдкрд╛рд▓рди рдХрд░рддрд╛ рд╣реИ HorizontalScrollerDelegate)ред

рдкреНрд░рддреНрдпреЗрдХ рджреГрд╢реНрдп рдХреЗ рд▓рд┐рдП, рд╕реНрдХреНрд░реЙрд▓ рджреГрд╢реНрдп рдХреЗ рдЕрдВрджрд░ - рдЪреЗрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдХрд┐ рдХреНрдпрд╛ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдЙрд╕ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ CGRectContainsPointред рдпрджрд┐ рдЖрдкрдХреЛ рдРрд╕рд╛ рдХреЛрдИ рджреГрд╢реНрдп рдорд┐рд▓рддрд╛ рд╣реИ, рддреЛ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЛ рдПрдХ рд╕рдВрджреЗрд╢ рднреЗрдЬреЗрдВ horizontalScroller:clickedViewAtIndex:рдФрд░ рдЪрдпрдирд┐рдд рдЖрдЗрдЯрдо рдХреЛ рд╕реНрдХреНрд░реЙрд▓ рдХреНрд╖реЗрддреНрд░ рдХреЗ рдХреЗрдВрджреНрд░ рдореЗрдВ рд╕реЗрдЯ рдХрд░реЗрдВред

рдЕрдм рд╕реНрдХреЙрд▓рд░ рдореЗрдВ рдбреЗрдЯрд╛ рдЕрдкрдбреЗрдЯ рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ:

 - (void)reload { // 1 -  ,   : if (self.delegate == nil) return; // 2 -   subviews: [scroller.subviews enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL * stop) { [obj removeFromSuperview]; }]; // 3 - xValue -      : CGFloat xValue = VIEWS_OFFSET; for (int i = 0; i < [self.delegate numberOfViewsForHorizontalScroller:self]; i++) { // 4 -     : xValue += VIEW_PADDING; UIView * view = [self.delegate horizontalScroller:self viewAtIndex:i]; view.frame = CGRectMake(xValue, VIEW_PADDING, VIEW_DIMENSIONS, VIEW_DIMENSIONS); [scroller addSubview:view]; xValue += VIEW_DIMENSIONS + VIEW_PADDING; } // 5 [scroller setContentSize:CGSizeMake(xValue + VIEWS_OFFSET, self.frame.size.height)]; // 6 -   initialView,    : if ([self.delegate respondsToSelector:@selector(initialViewIndexForHorizontalScroller:)]) { int initialView = [self.delegate initialViewIndexForHorizontalScroller:self]; CGPoint offset = CGPointMake(initialView * (VIEW_DIMENSIONS + (2 * VIEW_PADDING)), 0); [scroller setContentOffset:offset animated:YES]; } } 

рдЖрдЗрдП рдЗрд╕ рдХреЛрдб рд╕реЗ рдЧреБрдЬрд░реЗрдВ:
  1. рдЕрдЧрд░ рдХреЛрдИ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдирд╣реАрдВ рд╣реИ, рддреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдпрд╣рд╛рдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдирд╣реАрдВ рд╣реИред рд╣рдо рд╡рд┐рдзрд┐ рдХреЛ рдкреВрд░рд╛ рдХрд░рддреЗ рд╣реИрдВред
  2. (subviews), .
    (, ┬лsubview┬╗ ? ┬л┬╗ . :) тАФ . .)
  3. ( VIEWS_OFFSET ). 100 , #define .
  4. HorizontalScroller ( UIView ) , .
  5. , , .
  6. 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рд╕реВрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП ред рдПрдХ рдкрд╣реЗрд▓реА рдХреА рддрд░рд╣ рд▓рдЧ рд░рд╣рд╛ рд╣реИ? рдирд┐рд░рд╛рд╢рд╛ рдордд рдХрд░реЛ! рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреИрдЯрд░реНрди рд╣рдорд╛рд░реА рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреВрдлрд╛рди -AlbumViewAlbumView



рдкреНрд░реЗрдХреНрд╖рдХ


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

рдЖрдорддреМрд░ рдкрд░ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рдХрд┐рд╕реА рдЕрдиреНрдп рд╡рд╕реНрддреБ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЕрдкрдиреА рд░реБрдЪрд┐ "рдкрдВрдЬреАрдХреГрдд" рдХрд░рддрд╛ рд╣реИред рдЬрдм рд░рд╛рдЬреНрдп рдмрджрд▓рддрд╛ рд╣реИ, рддреЛ рд╕рднреА рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реВрдЪрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдРрдкрд▓ рдХреА рдкреБрд╢ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди рд╕рд░реНрд╡рд┐рд╕ рдЗрд╕ рддрд░рд╣ рдХреА рд╕реНрдХреАрдо рдХрд╛ рдПрдХ рдЬрд╛рдирд╛-рдорд╛рдирд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИред

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

рдХреЛрдХреЛ рдЗрд╕ рдкреИрдЯрд░реНрди рдХреЛ рджреЛ рд╕рдорд╛рди рддрд░реАрдХреЛрдВ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ: рд╕реВрдЪрдирд╛рдПрдВ рдФрд░ рдХреБрдВрдЬреА-рдореВрд▓реНрдп рдЕрд╡рд▓реЛрдХрди (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 { // 1 NSString * coverUrl = notification.userInfo[@"coverUrl"]; UIImageView * imageView = notification.userInfo[@"imageView"]; // 2 imageView.image = [persistencyManager getImage:[coverUrl lastPathComponent]]; if (imageView.image == nil) { // 3 dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ UIImage * image = [httpClient downloadImage:coverUrl]; // 4 dispatch_sync(dispatch_get_main_queue(), ^{ imageView.image = image; [persistencyManager saveImage:image filename:[coverUrl lastPathComponent]]; }); }); } } 

рдпрд╣рд╛рдБ рд╣реИ рдХрд┐ рдпрд╣ рдХреЛрдб рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ:

  1. downloadImageрдЗрд╕реЗ рдЕрдзрд┐рд╕реВрдЪрдирд╛ рд╕реЗ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ NSNotificationрдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ ред рдЗрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗ рдЫрд╡рд┐ рдХрд╛ URL рдФрд░ рдкреЙрдЗрдВрдЯрд░ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ UIImageViewред
  2. рдпрджрд┐ рд╣рдо PersistencyManagerрдкрд╣рд▓реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдП рдЧрдП рдереЗ, рддреЛ рд╣рдо рдЗрдореЗрдЬ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдФрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВ ред
  3. рдпрджрд┐ рдЫрд╡рд┐ рдЕрднреА рддрдХ рдЕрдкрд▓реЛрдб рдирд╣реАрдВ рдХреА рдЧрдИ рд╣реИ, рддреЛ рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ HTTPClientред
  4. рдЬрдм рдбрд╛рдЙрдирд▓реЛрдб рдкреВрд░рд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЫрд╡рд┐ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВ UIImageViewрдФрд░ рдЗрд╕реЗ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рд╕рд╣реЗрдЬреЗрдВред

рд╣рдо рдЕрдиреНрдп рд╡рд░реНрдЧреЛрдВ рд╕реЗ рдЫрд╡рд┐ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЬрдЯрд┐рд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЫрд┐рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд┐рд░ рд╕реЗ рдореБрдЦреМрдЯрд╛ рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЕрдзрд┐рд╕реВрдЪрдирд╛ рдХреЗ рдкреНрд░реЗрд╖рдХ рдХреЛ рд░реБрдЪрд┐ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЫрд╡рд┐ рдХрд╣рд╛рдВ рд╕реЗ рдЖрдИ рд╣реИ: рдЗрдВрдЯрд░рдиреЗрдЯ рд╕реЗ рдпрд╛ рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рд╕реЗред

рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдПрдВ рдФрд░ рдЪрд▓рд╛рдПрдВ, рдФрд░ рдЖрдк рд╣рдорд╛рд░реЗ рдпрд╣рд╛рдВ рд╕реБрдВрджрд░ рдХрд╡рд░ рджреЗрдЦреЗрдВрдЧреЗ HorizontalScroller:



IOS 9 рдФрд░ рдЙрд╕рд╕реЗ рдКрдкрд░ рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЕрдкрдбреЗрдЯ: рдХреИрд╕реЗ, рдлрд┐рд░ рд╕реЗ рддрд╕реНрд╡реАрд░реЗрдВ рдирд╣реАрдВ рджреЗрдЦреАрдВ?
. HTTPS, . , .

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

рд▓реЗрдХрд┐рди рдЖрдкрдиреЗ рдПрдХ рдмрдЧ рджреЗрдЦрд╛: "рдбреЗрдЬрд╝реА" рдХрддрд╛рдИ рдмрдВрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ! рдХреНрдпрд╛ рдмрд╛рдд рд╣реИ?

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

рдХреБрдВрдЬреА-рдорд╛рди рдЕрд╡рд▓реЛрдХрди (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 { //          , //      ,    .   //     .   , //    NSUserDefaults: [[NSUserDefaults standardUserDefaults] setInteger:currentAlbumIndex forKey:@"currentAlbumIndex"]; } - (void)loadPreviousState { currentAlbumIndex = [[NSUserDefaults standardUserDefaults] integerForKey:@"currentAlbumIndex"]; [self showDataForAlbumAtIndex:currentAlbumIndex]; } 

рд╡рд┐рдзрд┐ 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рдЖрд╡рд╢реНрдпрдХрддрд╛рдиреБрд╕рд╛рд░ рдЙрдирд╕реЗ рд╡рд░реНрдЧ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдирд╛ рд╣реИ ред рдпрд╣ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐:
  1. рдЖрдкрдХреЛ рдЧреБрдг рд╕реВрдЪреА рдХреЛ рд╕реАрдзреЗ рдХреЛрдб рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрджрд┐ рдЖрдк рдмрд╛рдж рдореЗрдВ рдЧреБрдгреЛрдВ рдХреЗ рдПрдХ рдЕрд▓рдЧ рд╕реЗрдЯ рдХреЗ рд╕рд╛рде рдПрдХ рдореВрд╡реА рд╡рд░реНрдЧ рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЗрд╕ рдбреЗрдЯрд╛ рдХреЛ рд╕рд╣реЗрдЬрдиреЗ рдФрд░ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирдП рдХреЛрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
  2. рд╣рдо рдирд┐рдЬреА рдЪрд░ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдирд╣реАрдВ рдмрдЪрд╛ рдкрд╛рдПрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рддреГрддреАрдп-рдкрдХреНрд╖ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИрдВред

рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ 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); 

рдЗрд╕ рдЖрджреЗрд╢ рд╕реЗ рд╣рдо рддреАрди рдЧреБрдгреЛрдВ рд╡рд╛рд▓реА рдПрдХ рд╡рд╕реНрддреБ рдмрдирд╛рддреЗ рд╣реИрдВ:

рдПрдирдХреИрдкреНрд╕реБрд▓реЗрд╢рди рдПрдХ рдЕрдиреБрд░реЛрдз рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рд▓рдЪреАрд▓рд╛ рдмрдирд╛рддрд╛ рд╣реИ: рдЗрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ, рд╕рд╣реЗрдЬреЗ рдЧрдП, рд╕рдВрд╢реЛрдзрд┐рдд, рдкрдВрдХреНрддрд┐рдмрджреНрдз ... рдЬреБрдЧрд╛рдбрд╝ рдХрд┐рдП рдЧрдП рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдмреАрдЪ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред Apple рд▓рдХреНрд╖реНрдп-рдХреНрд░рд┐рдпрд╛ рддрдВрддреНрд░ рдФрд░ рдордВрдЧрд▓рд╛рдЪрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕ рдкреИрдЯрд░реНрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред

рд▓рдХреНрд╖реНрдп-рдХрд╛рд░реНрдп Apple рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред рдХреЙрд▓ рдХреЗ рд▓рд┐рдП, рдПрдХ рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ NSInvocationрд╣реИ рдЬрд┐рд╕рдореЗрдВ рд▓рдХреНрд╖реНрдп рд╢рд╛рдорд┐рд▓ рд╣реЛрддрд╛ рд╣реИ (рдЬрд┐рд╕ рдкрд░ рд╕рдВрджреЗрд╢ рднреЗрдЬрд╛ рдЬрд╛рдПрдЧрд╛), рдПрдХ рд╕рдВрджреЗрд╢ рдЪрдпрдирдХрд░реНрддрд╛ рдФрд░ рдХреБрдЫ рдкреИрд░рд╛рдореАрдЯрд░ред рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░, рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред "рдЯреАрдо" рдкреИрдЯрд░реНрди рдХрд╛ рдПрдХ рд╢рд╛рдирджрд╛рд░ рдЙрджрд╛рд╣рд░рдг, рдЬреЛ рд╣рдореЗрдВ рдХреЛрдб рд╕реЗрдкрд░реЗрд╢рди (рдХрдо рдХрдиреЗрдХреНрдЯрд┐рд╡рд┐рдЯреА => рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЕрдзрд┐рдХ рд▓рдЪреАрд▓рд╛рдкрди) рджреЗрддрд╛ рд╣реИред рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рд╡рд╛рд▓реЗ рдХреЛ рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ рд╕реЗ рдЕрд▓рдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЕрдиреБрд░реЛрдз рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдХрдорд╛рдВрдб рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ


рдХреЙрд▓ рддрдВрддреНрд░ рдореЗрдВ рдЧреЛрддрд╛ рд▓рдЧрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд░рджреНрдж рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рддреИрдпрд╛рд░ рдХрд░реЗрдВрдЧреЗред рд╣рдо рдкреВрд░реНрд╡рд╡рдд рд╕реНрдЯреИрдХ рдХреЗ рд▓рд┐рдП UIToolbarрднреА рдкрд░рд┐рднрд╛рд╖рд┐рдд NSMutableArrayрдХрд░рддреЗ рд╣реИрдВред ViewController.m

рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХреЛ рд╡рд░реНрдЧ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ , рдЬрд╣рд╛рдВ рд╣рдордиреЗ рдЕрдиреНрдп рд╕рднреА рдЪрд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рд╣реИ:ViewController

 UIToolbar * toolbar; NSMutableArray * undoStack; //   ,       push  pop 

рдпрд╣ рдПрдХ рдЯреВрд▓рдмрд╛рд░ рд╣реЛрдЧрд╛, рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ - рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдмрдЯрди рд╡рд╛рд▓рд╛ рдЯреВрд▓рдмрд╛рд░ред рдФрд░ рдПрдХ рд╕рд░рдгреА рднреА рдЬреЛ рдХрдорд╛рдВрдб рд╕реНрдЯреИрдХ рдХреА рднреВрдорд┐рдХрд╛ рдирд┐рднрд╛рдПрдЧреАред рдЯрд┐рдкреНрдкрдгреА рд╕реЗ рдкрд╣рд▓реЗ

рд╢реАрд░реНрд╖ рдкрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ 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 { // 1 Album * deletedAlbum = allAlbums[currentAlbumIndex]; // 2 NSMethodSignature * sig = [self methodSignatureForSelector:@selector(addAlbum:atIndex:)]; NSInvocation * undoDeleteAction = [NSInvocation invocationWithMethodSignature:sig]; [undoDeleteAction setTarget:self]; [undoDeleteAction setSelector:@selector(addAlbum:atIndex:)]; [undoDeleteAction setArgument:&deletedAlbum atIndex:2]; [undoDeleteAction setArgument:&currentAlbumIndex atIndex:3]; [undoDeleteAction retainArguments]; // 3 [undoStack addObject:undoDeleteAction]; // 4 [[LibraryAPI sharedInstance] deleteAlbumAtIndex:currentAlbumIndex]; [self reloadScroller]; // 5 [toolbar.items[0] setEnabled:YES]; } 

рдпрд╣рд╛рдВ рдирдИ рджрд┐рд▓рдЪрд╕реНрдк рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВ, рдЖрдЗрдП рдЗрд╕ рдХреЛрдб рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рджреЗрдЦреЗрдВ:

  1. рд╣рдореЗрдВ рд╣рдЯрд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдПрд▓реНрдмрдо рдХрд╛ рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдорд┐рд▓рддрд╛ рд╣реИред
  2. рдПрдХ рд╡рд┐рдзрд┐ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ (рдХреНрд▓рд╛рд╕ рдСрдмреНрдЬреЗрдХреНрдЯ NSMethodSignature) рдмрдирд╛рдПрдБ ред рдФрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╣рдо рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ NSInvocationрд╣реИрдВ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдбрд┐рд▓реАрдЯ рдСрдкрд░реЗрд╢рди рдХреЛ рд░рджреНрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ - undoDeleteActionред
    NSInvocationрддреАрди рдмрд╛рддреЗрдВ рдЬрд╛рдирдиреА рдЪрд╛рд╣рд┐рдП:
    • рд▓рдХреНрд╖реНрдп - рдЬрд┐рд╕ рд╡рд╕реНрддреБ рдХреЛ рд╕рдВрджреЗрд╢ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ;
    • рдЪрдпрдирдХрд░реНрддрд╛ - рдЬреЛ рд╕рдВрджреЗрд╢ рдкреНрд░реЗрд╖рд┐рдд рдХрд░рдирд╛ рд╣реИ;
    • рд╕рдВрджреЗрд╢ рддрд░реНрдХ ред
    рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдореЗрдВ рдПрдХ рд╕рдВрджреЗрд╢ рднреЗрдЬрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдбрд┐рд▓реАрдЯ рдСрдкрд░реЗрд╢рди рдХреЗ рд╡рд┐рдкрд░реАрдд рд╣реИред рдЗрд╕рд▓рд┐рдП - рд╣рдЯрд╛рдП рдЧрдП рдПрд▓реНрдмрдо рдХреЛ рд╡рд╛рдкрд╕ рдЬреЛрдбрд╝реЗрдВред
  3. рдЬрдм рд╣рдордиреЗ рдмрдирд╛рдпрд╛ рд╣реИ undoDeleteAction, рддреЛ рдЗрд╕реЗ рдПрдХ рдХрд╛рд▓реНрдкрдирд┐рдХ "рд╕реНрдЯреИрдХ" рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ ...
    рдРрд╕рд╛ рдХрднреА рди рдХрд░реЗрдВ! рд▓реЗрдЦрдХ рд╕рд░рдгреА рдХреЛ рдПрдХ рд╕реНрдЯреИрдХ рдХрд╣рддрд╛ рд╣реИред рдЬреИрд╕реЗ, "рдХреЛрдб рдкрдврд╝рдиреЗ рд╡рд╛рд▓реЗ рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдХрд▓реНрдкрдирд╛ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╕рд░рдгреА рдПрдХ рд╕реНрдЯреИрдХ рд╣реИ" ... рдПрдХ рд╕реНрдЯреИрдХ рдЪрд╛рд╣рддреЗ рд╣реИрдВ? рджреЛ рдСрдкрд░реЗрд╢рди рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП: pushрдФрд░ popред рд╡рд╣ рд╕рдм рд╣реИред - рдиреЛрдЯ рдкреНрд░рддрд┐ред
  4. рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рд╕реЗ рдПрд▓реНрдмрдо рдирд┐рдХрд╛рд▓реЗрдВ LibraryAPIрдФрд░ рд╕реНрдХреЛрд░рд░ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВред
  5. рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдХрд╛рд░реНрд░рд╡рд╛рдИ рд╣реИ рдЬрд┐рд╕реЗ рдкреВрд░реНрд╡рд╡рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдкреВрд░реНрд╡рд╡рдд рдХрд░реЗрдВ рдмрдЯрди рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ред

рдиреЛрдЯредрд╕рд░реНрдХрд┐рдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП NSInvocation, рдЖрдкрдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдмрд╛рддреЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдирд╛ рд╣реЛрдЧрд╛:

рдЕрдВрдд рдореЗрдВ, рдкреВрд░реНрд╡рд╡рдд рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝реЗрдВ:

 - (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ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдордиреЗ рдЬреЛ рдЯреАрдо рдмрдирд╛рдИ рд╣реИ рдЙрд╕реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ (рдПрд▓реНрдмрдо рдХреЛ рд╣рдЯрд╛рддреЗ рд╕рдордп) - рдФрд░ рдпрд╣ рд╣рдЯрд╛рдП рдЧрдП рдПрд▓реНрдмрдо рдХреЛ рд╕реВрдЪреА рдореЗрдВ рд╡рд╛рдкрд╕ рдХрд░ рджреЗрддрд╛ рд╣реИред

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

рд╣рдорд╛рд░реЗ рд░рджреНрджреАрдХрд░рдг рддрдВрддреНрд░ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдРрдк рд▓реЙрдиреНрдЪ рдХрд░реЗрдВред рдПрдХ рдпрд╛ рджреЛ рдПрд▓реНрдмрдо рд╣рдЯрд╛рдПрдВ рдФрд░ рдЗрд╕рдХреЗ рдкреНрд░рднрд╛рд╡ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реНрд╡рд╡рдд рдХрд░реЗрдВ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ:

рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХреЗ рдмреАрдЪ рдПрд▓реНрдмрдо рд╕реВрдЪреА рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╕рд╣реЗрдЬреЗ рдЧрдП рд╣реИрдВ рдпрд╛ рдирд╣реАрдВ, рдпрд╣ рджреЗрдЦрдирд╛ рднреА рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред рдПрд▓реНрдмрдо рдХреЛ рд╣рдЯрд╛рдПрдВ, рдРрдк рдХреЛ рдкреГрд╖реНрдарднреВрдорд┐ рдкрд░ рднреЗрдЬреЗрдВ, рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдорд▓реНрдЯреАрдЯрд╛рд╕реНрдХрд┐рдВрдЧ рд╕реЗ рдмрдВрдж рдХрд░реЗрдВред рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдПрд▓реНрдмрдореЛрдВ рдХреА рд╕реВрдЪреА рдХреЛ рдмрдЪрд╛рдПрдЧрд╛, рдЖрдкрдХреЛ рдЕрдЧрд▓реА рдмрд╛рд░ рд╢реБрд░реВ рд╣реЛрдиреЗ рдкрд░ рдЗрд╕реЗ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЖрдЧреЗ рдХреНрдпрд╛ рд╣реИ


рдСрдмреНрдЬреЗрдХреНрдЯрд┐рд╡-рд╕реА рджреЛ рдФрд░ рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реБрдП: рдПрдмреНрд╕рдЯреНрд░реИрдХреНрдЯ рдлрд╝реИрдХреНрдЯрд░реА рдФрд░ рдЬрд╝рд┐рдореНрдореЗрджрд╛рд░реА рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛ ред рдЙрдирдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдирд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдФрд░ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдЖрд╡реЗрджрди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред

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

рдЖрдкрдХрд╛ рдХреЛрдб рд╢рд┐рдерд┐рд▓ рдпреБрдЧреНрдорд┐рдд рд╣реИ, рдкрдврд╝рдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рд╣реИ, рдкреБрди: рдЙрдкрдпреЛрдЧ рдореЗрдВ рдЖрд╕рд╛рди рд╣реИред рдпрджрд┐ рдХреЛрдИ рдЕрдиреНрдп рдбреЗрд╡рд▓рдкрд░ рдЗрд╕ рдХреЛрдб рдХреЛ рджреЗрдЦрддрд╛ рд╣реИ, рддреЛ рд╡рд╣ рдЬрд▓реНрджреА рд╕реЗ рд╕рдордЭ рдЬрд╛рдПрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ, рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдЧ рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИред

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



рдЕрдиреБрд╡рд╛рджрдХ рд╕реЗ (рдирд┐рд╖реНрдХрд░реНрд╖ рдХреЗ рдмрдЬрд╛рдп)


рдЖрдЗрдП рд╣рдо рд▓реЗрдЦ рдХреА рд╢реБрд░реБрдЖрдд рдХреЛ рдпрд╛рдж рдХрд░реЗрдВ: рдкреИрдЯрд░реНрди "рдХреНрд░рд┐рд╕реНрдЯреЛрдлрд░ рдЕрд▓реЗрдХреНрдЬреЗрдВрдбрд░" рджреНрд╡рд╛рд░рд╛ рдкрд╣рд▓реА рдмрд╛рд░ "рдкреИрдЯрд░реНрди рднрд╛рд╖рд╛" рдкреБрд╕реНрддрдХ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдкреИрдЯрд░реНрди рдПрдХ рдРрд╕реА рднрд╛рд╖рд╛ рд╣реИ рдЬреЛ рджреЛ рдЪреАрдЬреЛрдВ рдХреЛ рдЬреЛрдбрд╝рддреА рд╣реИ:
  1. рдбреЗрд╡рд▓рдкрд░ рдХрд╛ рдЕрдиреБрднрд╡
  2. рд╣рдо рдЬреЛ рднрд╛рд╖рд╛ рдмреЛрд▓рддреЗ рдФрд░ рд▓рд┐рдЦрддреЗ рд╣реИрдВред

рдЖрдкрдХреЛ рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдкреИрдЯрд░реНрди рдПрдХ рдЬреАрд╡рд┐рдд рднрд╛рд╖рд╛ рд╣реИ, рдФрд░ рдпрд╣ рдХрд┐ рдкреВрд░реНрдгрддрд╛ рдХреА рдХреЛрдИ рд╕реАрдорд╛ рдирд╣реАрдВ рд╣реИред рдЕрдВрддрд┐рдо рдЕрдзреНрдпрд╛рдп рдореЗрдВ "рд╕реНрдЯреИрдХ" рд╢рдмреНрдж рдЕрдХреНрд╕рд░ рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЛрдб рдореЗрдВ "рд╕реНрдЯреИрдХ" рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдкреНрд░рддрд┐рд╖реНрдард┐рдд рдирд╣реАрдВ рд╣реИред рдпрд╣ рд╡рд╕реНрддреБ рдХреНрдпрд╛ рд╣реИ? рд╕рдВрдкрддреНрддрд┐? рдПрдХ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо?

рдЖрдЗрдП рдЖрдкрдХреЛ рдмрддрд╛рддреЗ рд╣реИрдВ рдпрд╣рд╛рдВ рдХрд╛ рдЬрд╡рд╛рдмред рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ, рдпрд╣ рдЬреНрдЮрд╛рди рдХреЛрдб рдореЗрдВ рд╡реНрдпрдХреНрдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ " NSMutableArrayрднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдвреЗрд░ рд╣реЛ" рд╡рд╛рдХреНрдпрд╛рдВрд╢ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдорд┐рд▓ рд╕рдХреЗ ред рдХреЛрдб рдФрд░ рдкреНрд░рд▓реЗрдЦрди рдХреЛ рдПрдХ рджреВрд╕рд░реЗ рдХреЛ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдПрдХ рджреВрд╕рд░реЗ рдХреЛ рдкреВрд░рдХ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП ("рдЬреЛ рдХреЛрдб рд╕реЗ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗ рд░рд╣рд╛ рд╣реИ, рдЖрдк рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдкрд╛рдПрдВрдЧреЗ, рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд")ред

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

рдФрд░ рдЕрдзрд┐рдХредрд╣рдореЗрд╢рд╛ IDE рд╕реЗ рдЪреЗрддрд╛рд╡рдиреА рдХреЛ рджреЗрдЦреЗрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд┐рдзрд┐ рдХреЛрдб рдореЗрдВ showDataForAlbumAtIndex:рд╣рдордиреЗ рдПрдХ рдЪреЗрдХ рдХрд┐рдпрд╛ рдерд╛ if (albumIndex < allAlbums.count), рд▓реЗрдХрд┐рди рд╣рдордиреЗ рдЗрд╕реЗ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдЬрд╛рдВрдЪрд╛ (albumIndex >= 0)? рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреЗ рд▓реЗрдЦрдХ рдиреЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╕реЛрдЪрд╛ рдерд╛, рд▓реЗрдХрд┐рди рд╡рд░реНрдЧ рдХреЗ рд░рдЪрдирд╛рдХрд╛рд░реЛрдВ рдиреЗ NSArrayрд╕реЛрдЪрд╛, рдЗрд╕рд▓рд┐рдП AppCode рддреБрд░рдВрдд рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд░рддрд╛ рд╣реИ: рдХреЗ рд╕рд╛рде



рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд intрдХрд░рдиреЗ рдкрд░ NSUInteger, рд╣рдореЗрдВ рдПрдХ рд╕реБрд░рдХреНрд╖рд┐рдд рдХреЛрдб рдорд┐рд▓рддрд╛ рд╣реИ - рдмрд┐рдирд╛ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЬрд╛рдВрдЪ рдХреЗ - "рдбрд┐рдЬрд╝рд╛рдЗрди рджреНрд╡рд╛рд░рд╛"ред

рдкреБрдирд╢реНрдЪ


рдкрд░ рдИ-рдореЗрд▓ рд▓рд┐рдЦреЗрдВ рджреЗрд╡ @x128 .рдЖрд░рдпреВ , рдЕрдЧрд░ рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИред

рдпрд╣ рд▓реЗрдЦ Apple рдХреЗ рдХреЛрдХреЛ рдбрд┐рдЬрд╝рд╛рдЗрди рдкреИрдЯрд░реНрди рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ , рдЬреЛ рд▓реЗрдЦ рдХреЗ рдЕрдиреБрд╡рд╛рдж рдХреЗ рджреМрд░рд╛рди рдкреБрд░рд╛рдирд╛ рдерд╛:



рдЗрд╕ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЛ рд╕реНрдЯреНрд░реАрдорд▓рд╛рдЗрди рдпреЛрд░ рдРрдк рд╡рд┐рдж рдбрд┐рдЬрд╝рд╛рдЗрди рдкреИрдЯрд░реНрди рдХреЗ рд╕рд░рд▓ рд╡рд┐рд╡рд░рдг рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ , рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рд╕рднреА рд▓рд┐рдВрдХ "рдЧреИрдВрдЧ рдСрдлрд╝ рдлрд╝реЛрд░" рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред "рдореИрдХ рдПрдкреНрд╕ рдбреЗрд╡рд▓рдк рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВ" рдХрд╛ рдирд╛рд░рд╛ рдХрд┐рд╕реА рднреА рдХрд┐рддрд╛рдмреЛрдВ рдХреЗ рдЕрдиреБрдХреВрд▓ рдирд╣реАрдВ рд╣реИ ред рдЖрдк рдПрдХ рджрд┐рди рдореЗрдВ рдПрдХ рдкреБрд╕реНрддрдХ рдирд╣реАрдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред

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

рдХреНрдпрд╛ рдкрдврд╝рдирд╛ рд╣реИ?


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


All Articles