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

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

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

рдЦрд┐рд▓рд╛рдбрд╝рд┐рдпреЛрдВ рдХреА рд╕реВрдЪреА рд╡рд╛рд▓реА рд╕реНрдХреНрд░реАрди рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЯреАрдо рдХреЗ рд╕рднреА рдЦрд┐рд▓рд╛рдбрд╝рд┐рдпреЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреА рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдЖрджреЗрд╢ рдХреЗ рд╡рд┐рдкрд░реАрдд "рдЖрджреЗрд╢реЛрдВ рдХреА рд╕реВрдЪреА" рдкрд░ рдиреАрд▓реЗ рддреАрд░ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЗрд╕ рд╕реНрдХреНрд░реАрди рдкрд░ рдкрд░рд┐рд╡рд░реНрддрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

рдЯреАрдореЛрдВ рдХреЗ рд╕рд╛рде, рдЬрдм рдЖрдк
+
рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЯреАрдо рдореЗрдВ рдПрдХ рдирдП рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рд╕реНрдХреНрд░реАрди рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ, рдФрд░ рдЬрдм рдЖрдк
Edit
рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ
Edit
рддреЛ рдЖрдк рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╕рдВрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЕрдм рдЬрдм рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ
рдХрд┐ рд╣рдореЗрдВ
рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ, рд╣рдо рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред
SQLite рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдХ рднрдВрдбрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ
Hcode рдЪрд▓рд╛рдПрдВ рдФрд░ рдПрдХ рдирдпрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВред

рд╣рдо рдЗрд╕реЗ
рд▓реАрдЧрдореИрди рдХрд╣рддреЗ рд╣реИрдВ рдФрд░ рдХрдВрдкрдиреА рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ
book.coredata рд▓рд┐рдЦрддреЗ рд╣реИрдВред

рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж:

рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рдЗрд╕ рдЪрд░рдг рдореЗрдВ, рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдШрдЯрдХ рдФрд░ рднрд╛рдЧ рдПрдХ рдбреЗрдЯрд╛ рдореЙрдбрд▓ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рд╣реИред рдУрдкрди
*.xcdatamodeld
рдореЗрдВ:

рдореМрдЬреВрджрд╛
Event
рдЗрдХрд╛рдИ рдХреЛ рд╣рдЯрд╛рдПрдВ (
Delete
рдХреБрдВрдЬреА рджрдмрд╛рдПрдВ), рдЬреЛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд╣реЛрдЧреАред
Team
рдЗрдХрд╛рдИ рдмрдирд╛рдХрд░ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ:

Team
рдЗрдХрд╛рдИ рдХреЗ рд▓рд┐рдП рджреЛ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдмрдирд╛рдПрдБ:
- рдирд╛рдо (рд╕реНрдЯреНрд░рд┐рдВрдЧ)
- рд╡рд░реНрджреА рд░рдВрдЧ (рд╕реНрдЯреНрд░рд┐рдВрдЧ)
рд╣рдореЗрдВ рдирд┐рдореНрди рдЪрд┐рддреНрд░ рдорд┐рд▓рддреЗ рд╣реИрдВ:

рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдкреНрд░рдХрд╛рд░ рдХреЛ рдПрдХ рд╕рд╛рде рдХрдИ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдкрд░ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдмрд╕ рдЙрдиреНрд╣реЗрдВ рдЪреБрдирдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рджрд╛рдИрдВ рдУрд░ рд╕рд╣реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЪрдпрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛:

рдЗрд╕рдХреЗ рдмрд╛рдж, рддреАрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдПрдХ
Player
рдЗрдХрд╛рдИ рдмрдирд╛рдПрдБ:
- рдкрд╣рд▓рд╛ рдирд╛рдо (рд╕реНрдЯреНрд░рд┐рдВрдЧ)
- рдЕрдВрддрд┐рдо рдирд╛рдо (рд╕реНрдЯреНрд░рд┐рдВрдЧ)
- рдИрдореЗрд▓ (рд╕реНрдЯреНрд░рд┐рдВрдЧ)

рдПрдХ рд╕реЗ рдХрдИ рд░рд┐рд╢реНрддреЗ
Team
рдФрд░
Player
рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ рдмреАрдЪ рдПрдХ рдирдпрд╛ рд╕рдВрдмрдВрдз рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкрд╣рд▓реЗ
Team
рдЗрдХрд╛рдИ рдХрд╛ рдЪрдпрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░
Relationships
рдЕрдиреБрднрд╛рдЧ рдореЗрдВ
+
рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдФрд░ рдирдП
рдЦрд┐рд▓рд╛рдбрд╝рд┐рдпреЛрдВ рдХреЗ рд╕рдВрдШ рдХрд╛ рдирд╛рдо рджреЗрдВ
Destination
Player
рдЗрдХрд╛рдИ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВред рджрд╛рдИрдВ рдУрд░, рдЪрдпрдирд┐рдд
рдЦрд┐рд▓рд╛рдбрд╝рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдВрдХ рдХреЗ рд╕рд╛рде "рдЯреВ-рдХрдИ рд░рд┐рд▓реЗрд╢рдирд╢рд┐рдк" рдзреНрд╡рдЬ рд╕реЗрдЯ рдХрд░реЗрдВред
Cascade
рдХреЛ рд╡рд┐рд▓реЛрдкрди рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ рдЪреБрдиреЗрдВ (рдЬрдм рдХреЛрдИ рдЯреАрдо рд╣рдЯрд╛ рджреА рдЬрд╛рддреА рд╣реИ, рддреЛ рд╕рднреА рдЯреАрдо рдХреЗ рдЦрд┐рд▓рд╛рдбрд╝реА рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╣рдЯрд╛ рджрд┐рдП рдЬрд╛рдПрдВрдЧреЗ)

рдЕрдм рдЖрдкрдХреЛ рдЦрд┐рд▓рд╛рдбрд╝реА (
Player
рдЗрдХрд╛рдИ) рдХреА рддрд░рдл рд╕реЗ рдПрдХ рдХрдиреЗрдХреНрд╢рди рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рдо
Destination
рдХреНрд╖реЗрддреНрд░ рдореЗрдВ
team
рдирд╛рдордХ рд░рд┐рд╢реНрддреЗ рдХреЗ рд▓рд┐рдП рдПрдХ
Player
рдЗрдХрд╛рдИ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ,
Team
рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ, рдФрд░
Invers
рдлрд╝реАрд▓реНрдб рдореЗрдВ
Invers
players
рдЪрдпрди
players
(рдЙрд╕рдХреЗ рдмрд╛рдж,
Team
рдЗрдХрд╛рдИ рдХреЗ
players
рд░рд┐рд╢реНрддреЗ рдХреЗ рд▓рд┐рдП
Inverse
рдХреНрд╖реЗрддреНрд░ рд╕реЗрдЯ рдХрд░рдирд╛ рди рднреВрд▓реЗрдВ)

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдирд┐рд░реНрдорд╛рдг
рдбреЗрдЯрд╛ рдореЙрдбрд▓ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдЗрд╕ рдбреЗрдЯрд╛ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред рдПрдЪрдХреЗрдУрдбреА рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЖрджреЗрд╢реЛрдВ рдХреА рд╕реВрдЪреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ; рдЕрдЧрд▓рд╛ рдХрд╛рд░реНрдп
Team
рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдереЛрдбрд╝рд╛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛,
Event
рдирд╣реАрдВред
рд╣рдореЗрдВ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдХрдорд╛рдВрдб рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдзрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЪрд▓реЛ рдЗрд╕реЗ
MasterViewController.m
рдлрд╛рдЗрд▓ рдореЗрдВ
MasterViewController.m
рд╣реИрдВ, рдкрд╣рд▓реЗ
MasterViewController.h
рдореЗрдВ рдЗрд╕рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдирд╛ рднреВрд▓ рдЬрд╛рддреЗ рд╣реИрдВред
MasterViewController.h
рдореЗрдВ рдХреЛрдб рдЕрдм рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
#import <UIKit/UIKit.h> #import <CoreData/CoreData.h> @interface MasterViewController : UITableViewController <NSFetchedResultsControllerDelegate> @property (nonatomic, strong) NSFetchedResultsController *fetchedResultsController; @property (nonatomic, strong) NSManagedObjectContext *managedObjectContext; - (void)insertTeamWithName:(NSString *)name uniformColor:(NSString *)uniformColor; - (void)saveContext; @end
MasterViewController.m рдЦреЛрд▓реЗрдВ рдФрд░ рд╕реНрдХреНрд░реАрди рдирд╛рдо рдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░реЗрдВ:
self.title = NSLocalizedString(@"League Manager", @"League Manager");
рдЕрдм рд╣рдо рдПрдХ рдирдИ рдХрдорд╛рдВрдб рдЬреЛрдбрд╝рдиреЗ рдХреА рд╡рд┐рдзрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ:
- (void)insertTeamWithName:(NSString *)name uniformColor:(NSString *)uniformColor { NSManagedObjectContext *context = [self.fetchedResultsController managedObjectContext]; NSEntityDescription *entity = [[self.fetchedResultsController fetchRequest] entity]; NSManagedObject *newManagedObject = [NSEntityDescription insertNewObjectForEntityForName:[entity name] inManagedObjectContext:context]; [newManagedObject setValue:name forKey:@"name"]; [newManagedObject setValue:uniformColor forKey:@"uniformColor"]; [self saveContext]; }
рдЕрдм рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдПрдХ рдкрдВрдХреНрддрд┐ рдкрд╛рддреЗ рд╣реИрдВ:
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Event" inManagedObjectContext:self.managedObjectContext];
рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдмрджрд▓реЗрдВ:
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Team" inManagedObjectContext:self.managedObjectContext];
рдЕрдЧрд▓рд╛, рдЖрдкрдХреЛ рдореМрдЬреВрджрд╛ рдХреЛрдб рдореЗрдВ рдПрдХ рдФрд░ рдЫреЛрдЯрд╛ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕ рдкрдВрдХреНрддрд┐ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] iniWithKey:@"timestamp" ascending:NO];
рдкрд░:
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] iniWithKey:@"name" ascending:NO];
рдПрдХ рдирдИ рд╡рд╕реНрддреБ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдордиреЗ рдЗрд╕рдХреЗ рдЧреБрдгреЛрдВ рдХреЛ рдЙрди рдорд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рд╣реИ рдЬреЛ рдкрд╛рд░рд┐рдд рдХрд┐рдП рдЧрдП рдереЗ:
[newManagedObject setValue:name forKey:@"name"]; [newManagedObject setValue:uniformColor forKey:@"uniformColor"];
рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЧреБрдгреЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдЗрд╕реЗ рдмрдЪрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП
saveContext
рд╡рд┐рдзрд┐ рдХреЛ
saveContext
ред
- (void)saveContext { NSManagedObjectContext *context = [self.fetchedResultsController managedObjectContext]; NSError *error = nil; if(![context save:&error]){ NSLog(@"Unresolved error %@, %@", error, [error userInfo]); abort(); } }
рд╣рдо рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдПрдХ рдФрд░ рд╡рд┐рдзрд┐ рдХреЛ рдареАрдХ рдХрд░реЗрдВрдЧреЗ:
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { if (editingStyle == UITableViewCellEditingStyleDelete) { [self saveContext]; } }
рдЯреЗрдмрд▓ рд╕реЗрдЯрд┐рдВрдЧ
рдЯреЗрдмрд▓ рд╕реЗрд▓ рдХреЛ рдЖрд╡рд╢реНрдпрдХ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ рдмрдЬрд╛рдп
Event
рдПрдВрдЯрд┐рдЯреАрдЬрд╝ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрднреА рднреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╣рдореЗрдВ рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рдПрдХ рд╕реЗрд▓ рдореЗрдВ рджреЛ рдШрдЯрдХреЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: рдЯреАрдо рдХрд╛ рдирд╛рдо рдФрд░ рдлреЙрд░реНрдо рдХрд╛ рд░рдВрдЧ рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рдЯреАрдо рдЦреЗрд▓рддреА рд╣реИред рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рддрд╛рд▓рд┐рдХрд╛ рд╕реЗрд▓ рдХреА рд╢реИрд▓реА рдХреЛ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛, рд╕рд╛рде рд╣реА
cellForRowAtIndexPath:
рдЙрдкрдпреЛрдЧ
CellIdentifier
cellForRowAtIndexPath:
рд╡рд┐рдзрд┐ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЗрд╕ рдкрдВрдХреНрддрд┐ рдХреЛ рдмрджрд▓реЗрдВ:
static NSString* CellIdentifier = @"Cell";
рдкрд░:
static NSString* CellIdentifier = @"TeamCell";
рдФрд░ рд╣рдо рдирд┐рдореНрди рд╕реЗ рдирд┐рд░реНрдорд┐рдд рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВ:
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
рдкрд░:
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier];
рдПрдХ
configureCell:atIndexPath:
рдЬрдирд░реЗрдЯ рдХрд┐рдП рдЧрдП рдХреЛрдб рдореЗрдВ рд╡рд┐рдзрд┐, рдЬрд┐рд╕рдореЗрдВ рд╕реЗрд▓ рдЦреБрдж рдХреЛ рдбрд┐рд╕реНрдкреНрд▓реЗ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдкрдиреЗ рд╡рд░реНрддрдорд╛рди рд░реВрдк рдореЗрдВ, рд╡рд┐рдзрд┐
Team
рд╕рд╛рде рдХрд╛рдо рдХрд░рддреА рд╣реИ,
Team
рдирд╣реАрдВ, рдЗрд╕рд▓рд┐рдП рдХреБрдЫ рд╕рдорд╛рдпреЛрдЬрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
- (void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath { NSManagedObject *managedObject = [self.fetchedResultsController objectAtIndexPath:indexPath]; cell.textLabel.text = [[managedObject valueForKey:@"name"] description]; cell.detailTextLabel.text = [[managedObject valueForKey:@"uniformColor"] description]; cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton; }
рдЯреАрдо рдмрд┐рд▓реНрдбрд┐рдВрдЧ
рдЕрдм рддрдХ, рд╣рдорд╛рд░рд╛ рдЖрд╡реЗрджрди рдмрд╣реБрдд рдХрдо рд╣реИред рдпрд╣ рдПрдХ рдЯреАрдо рдирд╣реАрдВ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИ, рдПрдХ рдЦрд┐рд▓рд╛рдбрд╝реА рдирд╣реАрдВ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИред рдЕрдм рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡реЗрджрди рдЪрд▓рд╛рдиреЗ рдХрд╛ рд╕рд╣реА рд╕рдордп рд╣реИ рдХрд┐ рд╣рдо рд╕рд╣реА рд░рд╛рд╕реНрддреЗ рдкрд░ рд╣реИрдВ рдФрд░ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рддреЗ рд╕рдордп рдЖрдкрдХреЗ рдкрд╛рд╕ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реИрдВ, рддреЛ рд╕рднреА рдЪрд░рдгреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдлрд┐рд░ рд╕реЗ рдЬрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ, рдбреЗрдЯрд╛ рдореЙрдбрд▓ рдХрд╛ рдкреБрди: рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВред
рдЬрдм рдЖрдк
Master-Details View Application
рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕реЗ рдХреЛрдИ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдПрдХ рдФрд░ рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ
DetailViewController
рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдк рдЗрд╕ рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рд╣рдореЗрдВ рдЯреАрдо рдФрд░ рдЦрд┐рд▓рд╛рдбрд╝рд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕ рдирд┐рдпрдВрддреНрд░рдХ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд рдирд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рдирдП рдирд┐рдпрдВрддреНрд░рдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рд╣реИред
#import DetailViewController.h
рд╕реЗ рд▓рд╛рдЗрди
#import DetailViewController.h
рдирд┐рдХрд╛рд▓реЗрдВред
tableView:didSelectRowAtIndexPath:
рд╡рд┐рдзрд┐ рдФрд░ рдЗрд╕рдХреЗ рд╢рд░реАрд░ рдХреЛ рд╢реБрджреНрдз рдХрд░реЗрдВред рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { }
рдлрд┐рд░ рд╣рдо рд╕рднреА рддреАрди
DetailViewController
(.h, .m, .xib) рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рд╣рдо рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ + рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреНрд░реИрд╢ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ + рдЕрднреА рднреА
insertNewObject:
рдЧрдпрд╛ рд╣реИред рд╣рдореЗрдВ рдЗрд╕ рдмрдЯрди рдХреЗ рд▓рд┐рдП рдПрдХ рдирдИ рдЯреАрдо рдмрдирд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╕рдВрд▓рдЧреНрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдпрд╛ рдмрд▓реНрдХрд┐, рдирдИ рдЯреАрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА (рдЯреАрдо рдХрд╛ рдирд╛рдо рдФрд░ рдлреЙрд░реНрдо рд░рдВрдЧ) рджрд░реНрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝реАрд▓реНрдб рдХреЗ рд╕рд╛рде рдПрдХ рдореЛрдбрд▓ рд╡рд┐рдВрдбреЛ рджрд┐рдЦрд╛рдПрдВред рдЬрдм рдЖрдк рдХрд┐рд╕реА рд╕реЗрд▓ рдкрд░ рдХрдорд╛рдВрдб рд╕реНрдХреНрд░реАрди рдХреА рд╕реВрдЪреА рдкрд░ рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЙрд╕реА рд╡рд┐рдВрдбреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдореМрдЬреВрджрд╛ рдХрдорд╛рдВрдб рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рд╣рдо рдПрдХ рдирдпрд╛ рд╡рд░реНрдЧ рдмрдирд╛рддреЗ рд╣реИрдВ, рд╣рдорд╛рд░реА рдХрдХреНрд╖рд╛ рдХрд╛ рдЬрдирдХ
UIViewController
:

рд╣рдо рдЗрд╕ рд╡рд░реНрдЧ рдХреЛ
TeamViewController
рдХрд╣реЗрдВрдЧреЗ рдФрд░
With XIB for user interface
рд╡рд┐рдХрд▓реНрдк рдХреЗ
With XIB for user interface
рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рди рднреВрд▓реЗрдВред

Open
TeamViewController.h
рдЦреЛрд▓реЗрдВред рд▓реАрдЧ рдореИрдиреЗрдЬрд░ рдореЗрдВ,
MasterViewController
рдХреНрд▓рд╛рд╕
NSManagedObjectContext
рдкреНрд░рдмрдВрдзрди рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП
TeamViewController
рдХреЛ рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░рдмрдВрдзрди рд╡рд╛рддрд╛рд╡рд░рдг рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рд╡рд┐рдзрд┐ рдХреЗ рд╕рдВрджрд░реНрдн рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдЪреВрдВрдХрд┐ рдпрд╣ рдирд┐рдпрдВрддреНрд░рдХ рдХрдорд╛рдВрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдЬрд╝рд┐рдореНрдореЗрджрд╛рд░ рд╣реЛрдЧрд╛, рдпрд╣ рдЖрд░рдВрднреАрдХрд░рдг рдХреЗ рджреМрд░рд╛рди рдХрдорд╛рдВрдб рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ (рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдмрдирд╛рдиреЗ рдФрд░ рдЗрд╕реЗ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рд╡рд┐рдзрд┐ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА)ред рдРрдб / рдПрдбрд┐рдЯ рд╕реНрдХреНрд░реАрди рдХреЗ рдпреВрдЬрд░ рдЗрдВрдЯрд░рдлреЗрд╕ рдореЗрдВ рджреЛ рдЯреЗрдХреНрд╕реНрдЯ рдлреАрд▓реНрдб рд╣реЛрдВрдЧреЗ - рдЯреАрдо рдХреЗ рдирд╛рдо рдФрд░ рдЙрдирдХреЗ рдлреЙрд░реНрдо рдХреЗ рд░рдВрдЧ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЯреАрдо
TeamViewController
рдореЗрдВ рдЙрдирдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдкреНрд░реЙрдкрд░реНрдЯреА рдмрдирд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдЗрд╕ рд╕реНрдХреНрд░реАрди рдкрд░ рджреЛ рдмрдЯрди рднреА рд╣реЛрдВрдЧреЗ - рдирдП рдХрдорд╛рдВрдб рдХреЗ рд▓рд┐рдП рд╕реЗрд╡ рдмрдЯрди рдФрд░ рдХреИрдВрд╕рд▓ рдмрдЯрдиред
TeamViewController
рдкрд╛рд╕ рдЗрди рдмрдЯрдиреЛрдВ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИрдВрдбрд▓рд░ рд╡рд┐рдзрд┐рдпрд╛рдБ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред
TeamViewController.h
#import <UIKit/UIKit.h> @class MasterViewController; @interface TeamViewController : UIViewController { IBOutlet UITextField *name; IBOutlet UITextField *uniformColor; NSManagedObject *team; MasterVIewController *masterController; } @property (nonatomic, retain) UITextField *name; @property (nonatomic, retain) UITextField *uniformColor; @property (nonatomic, retain) NSManagedObject *team; @property (nonatomic, retain) MasterViewController *masterController; - (IBAction)save:(id)sender; - (IBAction)cancel:(id)sender; - (id)initWithMasterController:(MasterViewController *)aMasterController team:(NSManagedObject *)aTeam; @end
Open
TeamViewController.m
рдЦреЛрд▓реЗрдВ,
MasterViewController.h
рдЖрдпрд╛рдд
MasterViewController.h
,
initWithNibName:
рд╣рдЯрд╛рдПрдБ
initWithNibName:
,
name
,
team
рдФрд░
masterController
рд▓рд┐рдП
рд╕рд┐рдВрдереЗрд╕рд╛рдЗрдЬрд╝ рдЬреЛрдбрд╝реЗрдВред рдпрд╣ рдЖрд░рдВрдн рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝реЗрдВ:
- (id)initWithMasterController:(MasterController *)aMasterController team:(NSManagedObject *)aTeam { if((self = [super init])){ self.masterController = aMasterController; self.team = aTeam; } return self; }
рдпрджрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдХ рдирдИ рдЯреАрдо рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рддреЛ aTeam рдкреИрд░рд╛рдореАрдЯрд░ рд╢реВрдиреНрдп рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдПрдХ рдирдпрд╛
NSManagedObject
рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП
TeamViewController.m
рдирд┐рдпрдВрддреНрд░рдХ рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реЛрдЧрд╛ред рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рдВрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдореМрдЬреВрджрд╛ рдХрдорд╛рдВрдбреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдЪрдпрди рдХрд░рддрд╛ рд╣реИ, рддреЛ рдХрдВрдЯреНрд░реЛрд▓рд░ рдХрдорд╛рдВрдб рдСрдмреНрдЬреЗрдХреНрдЯ (рдХрдорд╛рдВрдб рдирд╛рдо рдФрд░ рдлреЙрд░реНрдо рд░рдВрдЧ) рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рд╕реНрдХреНрд░реАрди рдкрд░ рдкрд╛рда рдлрд╝реАрд▓реНрдб рдореЗрдВ рднрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд░рд╣рддрд╛ рд╣реИред рд╣рдо рдЕрдВрддрд┐рдо рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ
viewDidLoad
рд╡рд┐рдзрд┐ рдореЗрдВ рдЬреЛрдбрд╝ рджреЗрдВрдЧреЗ:
- (void)viewDidLoad{ [super viewDidLoad]; if(team != nil){ name.text = [team valueForKey:@"name"]; uniformColor.text = [team valueForKey:@"uniformColor"]; } }
рдЕрдм рдпрд╣ рд╕рд╣реЗрдЬреЗрдВ рдФрд░ рд░рджреНрдж рдХрд░реЗрдВ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдкрд░ рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░реНрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд╣рддрд╛ рд╣реИ:
- (IBAction)save:(id)sender { if(masterController != nil){ if(team != nil){ [team setValue:name.text forKey:@"name"]; [team setValue:uniformColor.text forKey:@"uniformColor"]; [masterController saveContext]; } else { [masterController insertNewTeamWithName:name.text uniformColor:uniformColor.text]; } } [self dismissModalViewControllerAnimated:YES]; }
cancel:
рдХрд░рдиреЗ рдХреА рд╡рд┐рдзрд┐
cancel:
рдмрд╕ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ / рдХрдорд╛рдВрдб рд╡рд┐рдВрдбреЛ рдЬреЛрдбрд╝реЗрдВред
TeamViewController.m
#import "TeamViewController.h" #import "MasterViewController.h" @implementation TeamViewController @synthesize name; @synthesize uniformColor; @synthesize team; @synthesize masterController; - (id)initWithMasterController:(MasterController *)aMasterController team:(NSManagedObejct *)aTeam { if((self = [super init])){ self.masterController = aMasterController; self.team = aTeam; } return self; } - (void)didReceiveMemoryWarning{ [super didReceiveMemoryWarning]; } #pragma mark - View lifecycle - (void)viewDidLoad{ [super viewDidLoad]; if(team != nil){ name.text = [team valueForKey:@"name"]; uniformColor.text = [team valueForKey:@"uniformColor"]; } } - (void)viewDidUnload{ [super viewDidUnload]; } - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { return (interfaceOrientation == UIInterfaceOrientationPortrait); } #pragma mark - Button handlers - (IBAction)save:(id)sender{ if(masterController != nil){ if(team != nil){ [team setValue:name.text forKey:@"name"]; [team setValue:uniformColor.text forKey:@"uniformColor"]; [masterController saveContext]; } else { [masterController insertTeamWithName:name.text uniformColor:uniformColor.text]; } } [self dismissModalViewControllerAnimated:YES]; } - (IBAction)cancel:(id)sender{ [self dismissModalViewControllerAnimated:YES]; } @end
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рд▓рд┐рдЦреЗ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд╕реНрд╡рдпрдВ рдмрдирд╛рдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо
TeamViewController.xib
рдЦреЛрд▓рддреЗ рд╣реИрдВ, рдпрд╣ рд╢реБрд░реВ рдореЗрдВ рд╣рдорд╕реЗ рдЦрд╛рд▓реА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рдордиреЗ рджреЛ рд▓реЗрдмрд▓, рджреЛ рдЯреЗрдХреНрд╕реНрдЯ рдЗрдирдкреБрдЯ рдлрд╝реАрд▓реНрдб рдФрд░ рджреЛ рдмрдЯрди рд╕реЗрдЯ рдХрд┐рдП рд╣реИрдВ, рд╣рдо рдмрдЯрди рдХреА рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВрдбрд▓рд░ рд╡рд┐рдзрд┐рдпреЛрдВ рд╕реЗ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рдЕрдВрддрд┐рдо рджреГрд╢реНрдп рдХреБрдЫ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:

рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдЖрд╡реЗрджрди рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдЗрдП
MasterViewController
рд╡рд╛рдкрд╕
MasterViewController
рдФрд░ рдХрдорд╛рдВрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде рд╕реНрдХреНрд░реАрди рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдЬреЛрдбрд╝реЗрдВред рд╣рдореЗрдВ рджреЛ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдХрдорд╛рдВрдб рд╕рдВрдкрд╛рджрди рд╕реНрдХреНрд░реАрди рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП: 1) рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗ + 2) рдХреНрд▓рд┐рдХ рдХрд┐рдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗ рд╕реВрдЪреА рд╕реЗ рдПрдХ рдХрдорд╛рдВрдб рдкрд░ рдХреНрд▓рд┐рдХ рдХрд┐рдпрд╛ред + рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред
MasterViewController.h
рдореЗрдВ рдПрдХ рдирдИ рд╡рд┐рдзрд┐ рдШреЛрд╖рд┐рдд рдХрд░реЗрдВ:
- (void)showTeamView;
MasterViewController.m
рдЬрд╛рдПрдВ,
TeamViewController.h
рдЖрдпрд╛рдд рдХрд░реЗрдВ рдФрд░ рдЙрдкрд░реЛрдХреНрдд рд╡рд┐рдзрд┐ рдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд▓рд╛рдЧреВ рдХрд░реЗрдВ:
- (void)showTeamView{ TeamViewController *teamViewController = [[TeamViewController alloc] initWithMasterController:self team:nil]; [self presentModalViewController:teamViewController animated:YES]; }
рдЕрдм рдпрд╣ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рд▓рд┐рдП "рд▓рд┐рдВрдХ" рдХреЛ рджрдмрд╛рдП рд░рдЦрддрд╛ рд╣реИред
viewDidLoad
рд╡рд┐рдзрд┐ рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рдЗрд╕ рдХреЛрдб рдХреЛ рдмрджрд▓реЗрдВ:
UIBarButtonItem *addButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(insertNewObject)];
рдЗрд╕ рдПрдХ рдкрд░:
UIBarButtonItem *addButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(showTeamView)];
рдЗрд╕ рд╕реНрддрд░ рдкрд░, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрдорд╛рдВрдб рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдЖрд╡реЗрджрди рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рддреБрд░рдВрдд рдХрдорд╛рдВрдб рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВ:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath)indexPath{ NSManagedObject *team = [[self fetchedResultsController] objectAtIndexPath:indexPath]; TeamViewController *teamViewController = [[TeamViewController alloc] initWithMasterController:self team:team]; [self presentModalViewController:teamViewController animated:YES]; }
рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд▓рд╛рдПрдБ:

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


рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдЦрд╛рд▓реА рдирд╛рдореЛрдВ рд╡рд╛рд▓реА рдЯреАрдо рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рд░рдВрдЧ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдпрд╣ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдерд╛, рддреЛ рд╣рдореЗрдВ рдЦрд░рд╛рдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбреЗрдЯрд╛ рд╕реЗ рдХреБрдЫ рд╕реБрд░рдХреНрд╖рд╛ рдЙрдкрд╛рдп рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рдордиреЗ рдбреЗрдЯрд╛ рд╕рддреНрдпрд╛рдкрди рдХреЗ рд╕рд╛рде рдЬрд╛рдирдмреВрдЭрдХрд░ рдРрд╕реА "рдЧрд▓рддреА" рдЫреЛрдбрд╝ рджреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдзреНрдпрд╛рдп 5 рдореЗрдВ рд╣рдо рдбреЗрдЯрд╛ рд╕рддреНрдпрд╛рдкрди рдХреЗ рддрд░реАрдХреЛрдВ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░реЗрдВрдЧреЗред
рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдмрдВрдж рдХрд░реЗрдВ, рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ ... рдЕрдкрдиреЗ рдХрд╛рдо рдХрд╛ рдЖрдирдВрдж рд▓реЗрдВ ... рд▓реЗрдХрд┐рди, рд╣рдордиреЗ рдХреЗрд╡рд▓ рдЯреАрдореЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╕рдорд╛рдкреНрдд рдХрд░ рджрд┐рдпрд╛ рд╣реИ, рдФрд░ рдЕрднреА рднреА рдЦрд┐рд▓рд╛рдбрд╝рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдмрд╛рдХреА рд╣реИред рдпрд╣ рд╣рдо рдЕрдЧрд▓реЗ рднрд╛рдЧ рдореЗрдВ рдХрд░реЗрдВрдЧреЗред
рдкреНрд▓реЗрдпрд░ рдкреНрд░рдмрдВрдзрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕
рдЦрд┐рд▓рд╛рдбрд╝реА рдкреНрд░рдмрдВрдзрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рджреЛ рд╕реНрдХреНрд░реАрди рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ: рдПрдХ рдЯреАрдо рдореЗрдВ рдЦрд┐рд▓рд╛рдбрд╝рд┐рдпреЛрдВ рдХреА рд╕реВрдЪреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдФрд░ рджреВрд╕рд░рд╛ рдПрдХ рдирдП рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдпрд╛ рдХрд┐рд╕реА рдореМрдЬреВрджрд╛ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдЕрдзрд┐рдХрд╛рдВрд╢ рднрд╛рдЧ рдХреЗ рд▓рд┐рдП рдпреЗ рдирд┐рдпрдВрддреНрд░рдХ рдЖрджреЗрд╢реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдП рдЧрдП рдирд┐рдпрдВрддреНрд░рдХ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЙрдирдХреЗ рдкрд╛рд╕
NSFetchedResultsController
рдФрд░ рдХреЛрд░ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреЗ рдмрд╛рдХреА рдирд╣реАрдВ рд╣реИрдВ, рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рд╡реЗ рдХреЛрд░ рдбреЗрдЯрд╛
MasterViewController
рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХреЛ
MasterViewController
ред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЯреАрдо рдХреЗ рдЦрд┐рд▓рд╛рдбрд╝рд┐рдпреЛрдВ рдХреА рд╕реВрдЪреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рдпрдВрддреНрд░рдХ рдФрд░ рдПрдХ рд╕реНрдХреНрд░реАрди рдмрдирд╛рдПрдВред рд╣рдо рдПрдХ рдирдпрд╛
PlayerListViewController
рдирд┐рдпрдВрддреНрд░рдХ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЗрд╕рдХрд╛ рдореВрд▓ рд╡рд░реНрдЧ
UITableViewController
рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ "рдпреВрдЬрд░ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд▓рд┐рдП XIB рдХреЗ рд╕рд╛рде" рд╡рд┐рдХрд▓реНрдк рдХреЛ рдЕрдирдЪреЗрдХ рдХрд░рддреЗ рд╣реИрдВред рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓реЗрдВ
PlayerListViewController.h
ред рдпрд╣ рд╡рд░реНрдЧ рдЯреАрдо рдХреЗ рдЦрд┐рд▓рд╛рдбрд╝рд┐рдпреЛрдВ рдХреА рд╕реВрдЪреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЗрд╕ рд╡рд░реНрдЧ рдореЗрдВ рдЯреАрдо рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рд▓рд┐рдВрдХ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕ рддрдереНрдп рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдпрд╣ рд╡рд░реНрдЧ
MasterViewController
рдХреЛ рдХреЛрд░ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХреЛ
MasterViewController
, рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рднреА рдЖрд╡рд╢реНрдпрдХ рд╣реИред
рдирдП рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░реАрди рдкрд░ рдПрдХ + рдмрдЯрди рд╣реЛрдЧрд╛ред рдЗрд╕реА рдХреНрд▓рд┐рдХ рд╣реИрдВрдбрд▓рд░ рд╡рд┐рдзрд┐ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░реЗрдВред
PlayerListViewController.h #import <UIKit/UIKit.h> @class MasterViewController; @interface PlayerListViewController : UITableVIewController { NSManagedObject *team; MasterViewController *masterViewController; } @property (nonatomic, retain) NSManagedObject *team; @property (nonatomic, retain) MasterViewController *masterController; - (id)initWithMasterController:(MasterViewController *)aMasterController team:(NSManagedObject *)aTeam; - (void)showPlayerView; - (NSArray *)sortPlayers; @end
PlayerListViewController.m
рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓реЗрдВ рдФрд░
PlayerListViewController.m
рдЖрдпрд╛рдд
MasterVIewController.h
,
team
рдФрд░
masterController
рд╕рдВрд╢реНрд▓реЗрд╖рд┐рдд рдХрд░реЗрдВред рдЙрддреНрдкрдиреНрди
initWithStyle:
рдмрджрд▓реЗрдВ
initWithStyle:
initWithMasterController:
рдЬреЛ рджреЛ рдЧреБрдгреЛрдВ рдФрд░ рд╕реНрдЯреЛрд░реЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ:
- (id)initWithMasterController:(MasterVIewController *)aMasterVIewController team:(NSManagedObject *)aTeam { if((self = [super init])){ self.masterController = aMasterController; self.team = aTeam; } return self; }
рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЬреЗрдирд░реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛
viewDidLoad
рд╡рд┐рдзрд┐ рдЗрд╕ рдкреНрд░рдХрд╛рд░
viewDidLoad
рдЧрдпрд╛ рд╣реИ:
- (void)viewDidLoad{ [super viewDidLoad]; self.title = @"Player"; UIBarButtonItem *addButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(showPlayerView)]; self.navigationItem.rightBarButtonItem = addButton; }
рдФрд░ рдЕрднреА рдХреЗ рд▓рд┐рдП,
showPlayerView
рдЦрд╛рд▓реА рдЫреЛрдбрд╝ рджреЗрдВ:
- (void)showPlayerView{ }
рд╡реНрдпреВрдкреНрд▓реЗрдпрд░ рд╡рд┐рдзрд┐ рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░реЗрдВ: рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
- (void)viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated]; [self.tableView reloadData]; }
рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдЦрд┐рд▓рд╛рдбрд╝рд┐рдпреЛрдВ рдХреА рд╕реВрдЪреА рдХреЛ рдПрдХрд▓ рдЦрдВрдб (рдЕрдиреБрднрд╛рдЧ) рдореЗрдВ рд╡рд░реНрдгрд╛рдиреБрдХреНрд░рдо рд╕реЗ рдХреНрд░рдордмрджреНрдз рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╕рднреА рдЯреАрдо рдХреЗ рдЦрд┐рд▓рд╛рдбрд╝рд┐рдпреЛрдВ рдХреА рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ
valueForKey:@"players"
рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛
valueForKey:@"players"
рдЯреАрдо рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рддрд░реАрдХрд╛, рдЬреЛ
NSSet*
рдЦрд┐рд▓рд╛рдбрд╝рд┐рдпреЛрдВ рдХреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд▓реМрдЯрд╛ рджреЗрдЧрд╛ред рдиреАрдЪреЗ рддрд╛рд▓рд┐рдХрд╛ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рд╣реИ:
- (NSUInteger)numberOfSectionInTableView:(UITableView *)tableView { return 1; } - (NSInteger)tableView:(UITableVIew *)tableView numberOfRowsInSection:(NSInteger)section { return [(NSSet *)[team valueForKey:@"players"] count]; } - (UITableViewCell *)tableView:(UITableVIew *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"PlayerCell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if(cell == nil){ cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier]; } NSManagedObject *player = [[self sortPlayers] objectAtIndex:indexPath.row]; cell.textLabel.text = [NSString stringWithFormat:@"%@ %@", [[player valueForKey:@"firstName"] description], [[player valueForKey:@"lastName"] description]]; cell.detailTextLabel.text = [[player valueForKey:@"email"] description]; return cell; }
рдЗрд╕рдХреЗ рдмрд╛рдж
sortPlayers
рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЙрд▓ рд╣реИ, рдЬреЛ рдЦрд┐рд▓рд╛рдбрд╝рд┐рдпреЛрдВ рдХреА рдПрдХ рдХреНрд░рдордмрджреНрдз рд╕рд░рдгреА рджреЗрддрд╛ рд╣реИ:
- (NSArray *)sortPlayers{ NSSortDescriptor *sortLastNameDescriptor = [[NSSortDescriptor alloc] initWithKey:@"lastName" ascending:YES]; NSArray *sortDescriptors = [NSArray arrayWithObjects:sortLastNameDescriptor, nil]; return [[(NSSet *)[team valueForKey:@"players"] allObjects] sortedArrayUsingDescriptors:sortDescriptors]; }
рдЯреАрдо рдХреЗ рдЦрд┐рд▓рд╛рдбрд╝рд┐рдпреЛрдВ рдХреА рд╕реВрдЪреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо MasterViewController.m рдкрд░ рд▓реМрдЯреЗрдВрдЧреЗ рдФрд░ рдПрдХ рдРрд╕рд╛ рддрд░реАрдХрд╛ рдЬреЛрдбрд╝реЗрдВрдЧреЗ рдЬреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рдПрдХреНрд╕реЗрд╕рд░реА (рдмреНрд▓реВ рд╕реЗрд▓ рдПрд▓рд┐рдореЗрдВрдЯ) рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛:
- (void)tableView:(UITableVIew *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath{ NSManagedObject *team = [self.fetchedResultsController objectAtIndexPath:indexPath]; PlayerListViewController *playerListViewController = [[PlayerListViewController alloc] initWithMasterController:self team:team]; [self.navigationController pushViewController:playerListViewController animated:YES]; }
PlayerListViewController.h
рдХреЗ рдЖрдпрд╛рдд рдХреЛ
PlayerListViewController.h
рдореЗрдВ
MasterViewController.m
ред рдЕрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░реЗрдВ рдФрд░ рдЪрд▓рд╛рдПрдВред рдЯреАрдореЛрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рд╣рдо рдЙрди рдЯреАрдореЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдордиреЗ рдкрд╣рд▓реЗ рдмрдирд╛рдпрд╛ рдерд╛, рдЬрдм рдЖрдк рдПрдХреНрд╕реЗрд╕рд░реА рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЪрдпрдирд┐рдд рдЯреАрдо рдХреЗ рдЦрд┐рд▓рд╛рдбрд╝рд┐рдпреЛрдВ рдХреА рд╕реВрдЪреА рдЦреБрд▓рддреА рд╣реИ (рдЬрдм рддрдХ рдХрд┐ рдЦрд┐рд▓рд╛рдбрд╝реА рд╕реВрдЪреА рдЦрд╛рд▓реА рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдордиреЗ рдПрдХ рдирдП рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЛ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ)ред

рдЦрд┐рд▓рд╛рдбрд╝рд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝реЗрдВ, рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ рдФрд░ рд╣рдЯрд╛рдПрдВ
рдЖрд╡реЗрджрди рд▓рдЧрднрдЧ рддреИрдпрд╛рд░ рд╣реИ; рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд▓рд╛рдпрдХ рдПрдХрдорд╛рддреНрд░ рдЪреАрдЬ рдЦрд┐рд▓рд╛рдбрд╝рд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ / рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдирд╛ / рд╣рдЯрд╛рдирд╛ рд╣реИред
рдЙрдкрдпреБрдХреНрдд XIB рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рдирд┐рдпрдВрддреНрд░рдХ (
UIViewController
) рдмрдирд╛рдПрдВ рдФрд░ рдЗрд╕реЗ
PlayerViewController
ред рдпрд╣
TeamViewController
рд╕рдорд╛рди рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ рддреАрди рдлрд╝реАрд▓реНрдб рд╣реЛрдВрдЧреЗ:
lastName
,
firstName
рдФрд░
email
ред рдирд┐рдпрдВрддреНрд░рдХ рдореЗрдВ
MasterViewController
рдПрдХ рд▓рд┐рдВрдХ рднреА рд╣реЛрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдХреЛрд░ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд▓рд┐рдЦреА рдЧрдИ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рджреЛ рдФрд░ рдЧреБрдг рднреА рдореМрдЬреВрдж рд╣реЛрдВрдЧреЗ: рд╡рд╣ рдЯреАрдо рдЬрд┐рд╕рдореЗрдВ рдЦрд┐рд▓рд╛рдбрд╝реА рдЦреЗрд▓рддрд╛ рд╣реИ рдФрд░ рдЦрд┐рд▓рд╛рдбрд╝реА рдЦреБрджред рдпрджрд┐ рдЦрд┐рд▓рд╛рдбрд╝реА рдСрдмреНрдЬреЗрдХреНрдЯ
nil
, рддреЛ
PlayerViewController
рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдирдпрд╛ рдЦрд┐рд▓рд╛рдбрд╝реА рдмрдирд╛рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЕрдиреНрдпрдерд╛, рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЗ рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдирд╛ред рд╕реНрдХреНрд░реАрди рдкрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рддреАрди рдмрдЯрди рд╣реЛрдВрдЧреЗ: рд╕реЗрд╡, рдХреИрдВрд╕рд┐рд▓ рдФрд░ рдбрд┐рд▓реАрдЯред рдХрд┐рд╕реА рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЛ рд╣рдЯрд╛рдиреЗ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╕рдордп, рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗ
PlayerViewController
рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣реЗрдВрдЧреЗ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐
PlayerViewController
рдкреНрд░реЛрдЯреЛрдХреЙрд▓
UIActionSheetDelegate
рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред
PlayerViewController.h #import <UIKit/UIKit.h> @class MasterViewController; @interface PlayerViewController : UIViewController <UIActionSheetDelegate> { IBOutlet UITextField *firstName; IBOutlet UITextField *lastName; IBOutlet UITextField *email; NSManagedObject *team; NSManagedObject *player; MasterViewController *masterViewController; } @property (nonatomic, retain) UITextField *firstName; @property (nonatomic, retain) UITextField *lastName; @property (nonatomic, retain) UITextField *email; @property (nonatomic, retain) NSManagedObject *team; @property (nonatomic, retain) NSManagedObject *player; @property (nonatomic, retain) MasterViewController *masterController; - (IBAction)save:(id)sender; - (IBAction)cancel:(id)sender; - (IBAction)confirmDelete:(id)sender; - (id)initWithMasterController:(MasterViewController *)aMasterController team:(NSManagedObject *)aTeam player:(NSManagedObject *)aPlayer; @end
рдЕрдм
PlayerViewController.m
рдЦреЛрд▓реЗрдВ,
PlayerViewController.m
рдЖрдпрд╛рдд
MasterViewController.h
рдФрд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реЗ рд╕рднреА рдЧреБрдгреЛрдВ рдХреЗ рд▓рд┐рдП
@synthesize
рдЬреЛрдбрд╝реЗрдВред
рдПрдХ рдЖрд░рдВрднрд┐рдХ рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝реЗрдВ рдЬреЛ PlayerVIewController.m
рд╡рд░реНрдЧ MasterViewController
, рдХрдорд╛рдВрдб рдФрд░ рд╕рдВрднрд╡рддрдГ рдПрдХ рдЦрд┐рд▓рд╛рдбрд╝реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдЧрд╛ ред - (id)initWithMasterController:(MasterViewController *)aMasterController team:(NSManagedObject *)aTeam player:(NSManagedObject *)aPlayer{ if((self = [super init])){ self.masterController = aMasterController; self.team = team; self.player = player; } return self; }
viewDidLoad
рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЗ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдкрд╛рда рдлрд╝реАрд▓реНрдб рдореЗрдВ рднрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдзрд┐ рдореЗрдВ рдПрдХ рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ , рдЕрдЧрд░ рдпрд╣ рдмрд░рд╛рдмрд░ рдирд╣реАрдВ рд╣реИ nil
ред - (void)viewDidLoad { [super viewDidLoad]; if(player != nil){ firstName.text = [player valueForKey:@"firstName"]; lastName.text = [player valueForKey:@"lastName"]; email.text = [player valueForKey:@"email"]; } }
рд╣рдорд╛рд░рд╛ рдЕрдЧрд▓рд╛ рдХрджрдо рдмрдЯрди рдХреНрд▓рд┐рдХ рд╣реИрдВрдбрд▓рд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реЛрдЧрд╛: - (IBAction)save:(id)sender{ if(masterController != nil){ if(player != nil){ [player setValue:firstName.text forKey:@"firstName"]; [player setValue:lastName.text forKey:@"lastName"]; [player setValue:email.text forKey:@"email"]; } else { [masterController insertPlayerWithTeam:team firstName:firstName.text lastName:lastName.text email:email.text]; } } [self dismissModelViewControllerAnimated:YES]; } - (IBAction)cancel:(id)sender{ [self dismissModalViewControllerAnimated:YES]; }
insertPlayerWithTeam:firstName:lastName:email:
рдирд┐рдпрдВрддреНрд░рдХ рдореЗрдВ MasterViewController
рдХреЛрдИ рд╡рд┐рдзрд┐ рдЕрднреА рддрдХ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕реЗ рдХреБрдЫ рдорд┐рдирдЯреЛрдВ рдореЗрдВ рд╢рд╛рдмреНрджрд┐рдХ рд░реВрдк рд╕реЗ рд▓рд┐рдЦреЗрдВрдЧреЗред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдЙрд╕ confirmDelete:
рд╡рд┐рдзрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ "рд╣рдЯрд╛рдПрдВ" рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдкрд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд╡рд┐рдзрд┐ рддреБрд░рдВрдд рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЛ рдирд╣реАрдВ рд╣рдЯрд╛рдПрдЧреА, рд▓реЗрдХрд┐рди рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЗрд╕ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдкрд░ рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣реЗрдВрдЧреА (рдпрд╣ рдЖрдХрд╕реНрдорд┐рдХ рдХреНрд▓рд┐рдХ рдФрд░ рдЦрд┐рд▓рд╛рдбрд╝рд┐рдпреЛрдВ рдХреЗ рд╡рд┐рд▓реЛрдкрди рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред рдпрд╣рд╛рдБ рдХреНрдпрд╛ рд╡рд┐рдзрд┐ рдХреА рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛ confirmDelete:
: - (IBAction)confirmDelete:(id)sender{ if(player != nil){ UIActionSheet *confirm = [[UIActionSheet alloc] initWithTitle:nil delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:@"Delete Player" otherButtonTitles:nil]; confirm.actionSheetStyle = UIActionSheetStyleBlackTranslucent; [confirm showInView:self.view]; } }
рдЬреЛ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХрд╛рд░реНрд░рд╡рд╛рдИ UIActionSheet
рдХрд░реЗрдЧрд╛, рд╡рд╣ рд╡рд░реНрддрдорд╛рди рд╡рд░реНрдЧ рд╣реЛрдЧрд╛ред рдЬрдм рдЖрдк рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ UIActionSheet
рд╡рд┐рдзрд┐ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ clickedButtonAtIndex:
, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╡рд┐рдзрд┐ рдпрд╣ рдЬрд╛рдВрдЪреЗрдЧреА рдХрд┐ рдХреМрди рд╕рд╛ рдмрдЯрди рджрдмрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдпрджрд┐ рд╣рдЯрд╛рдПрдВ рдмрдЯрди, рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдзрд┐ (рдЬрд┐рд╕реЗ рд╣рдо рдмрд╛рдж рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░реЗрдВрдЧреЗ) рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛: - (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex{ if(buttonIndex == 0 && masterController != nil){ [masterController deletePlayer:player]; [self dismissModalViewControllerAnimated:YES]; } }
рдЖрдЗрдП MasterViewController.h
рд╣рдо рдЙрди рджреЛ рддрд░реАрдХреЛрдВ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдордиреЗ рдЕрднреА рддрдХ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рд╣реА рдЙрдкрдпреЛрдЧ рдХрд░ рдЪреБрдХреЗ рд╣реИрдВ: - (void)insertPlayerWithTeam:(NSManagedObject *)team firstName:(NSString *)firstName lastName:(NSString *)lastName email:(NSString *)email; - (void)deletePlayer:(NSManagedObject *)player;
рдЕрдм MasterViewController.m
рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдЦреЛрд▓реЗрдВ рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░реЗрдВ: - (void)insertPlayerWithTeam:(NSManagedObject *)team firstName:(NSString *)firstName lastName:(NSString *)lastName email:(NSString *)email{ NSManagedObjectContext *context = [self.fetchedResultsController managedObjectContext]; NSManagedObject *player = [NSEntityDescription insertNewObjectForEntityForName:@"Player" inManagedObjectContext:context]; [player setValue:firstName forKey:@"firstName"]; [player setValue:lastName forKey:@"lastName"]; [player setValue:email forKey:@"email"]; [player setValue:team forKey:@"team"]; [self saveContext]; } - (void)deletePlayer:(NSManagedObject *)player{ NSManagedObjectContext *context = [self.fetchedResultsController managedObjectContext]; [context deleteObject:player]; [self saveContext]; }
рдЕрдВрддрд┐рдо рдЪрд░рдг рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЛ рдЬреЛрдбрд╝рдиреЗ / рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╕реНрдЯрдо рд╕реНрдХреНрд░реАрди рдмрдирд╛рдирд╛ рд╣реИред рдЪрдпрди рдХрд░реЗрдВ PlayerViewController.xib
, рдЗрд╕реЗ рдиреАрдЪреЗ рджреА рдЧрдИ рддрд╕реНрд╡реАрд░ рдореЗрдВ рджрд┐рдЦрд╛рдП рдЧрдП рдлреЙрд░реНрдо рдореЗрдВ рд▓рд╛рдПрдВ рдФрд░ рд╕рднреА рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд╕рдВрдмрдВрдзрд┐рдд рдмрдЯрди рдХреЗ рд╕рд╛рде рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВред
рдЗрд╕ рд╕реНрдХреНрд░реАрди рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрд╕ рдкрджреНрдзрддрд┐ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рд╡рд╛рдкрд╕ рд▓реМрдЯрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ showPlayerView:
рдЬрд┐рд╕рдХрд╛ рд╣рдордиреЗ рдкрд╣рд▓реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдерд╛ред рдПрдХ PlayerListViewController.m
рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЖрдпрд╛рдд рдХрд░реЗрдВ PlayerViewController.h
ред - (void)showPlayerVIew{ PlayerVIewController *playerViewController = [[PlayerVIewController alloc] initWithMasterController:masterController team:team player:nil]; [self presentModalViewController:playerVIewController animated:YES]; }
рд╣рдореЗрдВ рдЦрд┐рд▓рд╛рдбрд╝реА рд╕реВрдЪреА рдХреА рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рдо PlayerListViewController.m
рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рд╡рд┐рдзрд┐ рдореЗрдВ рдкрд╛рддреЗ рд╣реИрдВ didSelectRowAtIndexPath:
рдФрд░ рдЗрд╕реЗ рдирд┐рдореНрди рд░реВрдк рдореЗрдВ рд▓рд╛рддреЗ рд╣реИрдВ: - (void)tableView:(UITableVIew *)tableVIew didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ NSManagedObject *player = [[self sortPlayers] objectAtIndex:indexPath.row]; PlayerViewController *playerViewController = [[PlayerVIewController alloc] initWithMasterController:masterController team:team player:player]; [self presentModalVIewController:playerViewController animated:YES]; }
рдЗрд╕рдХреЗ рд▓рд┐рдП, рдЯреАрдо рдФрд░ рдЦрд┐рд▓рд╛рдбрд╝реА рдкреНрд░рдмрдВрдзрди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреВрд░рд╛ рд╣реЛ рдЪреБрдХрд╛ рд╣реИред рдРрдк рд▓реЙрдиреНрдЪ рдХрд░реЗрдВред рдЦрд┐рд▓рд╛рдбрд╝рд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝реЗрдВ, рдЦрд┐рд▓рд╛рдбрд╝рд┐рдпреЛрдВ рдХреЛ рдирд┐рдХрд╛рд▓реЗрдВ, рдЦрд┐рд▓рд╛рдбрд╝рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдЯреАрдореЛрдВ рдХреЛ рд╣рдЯрд╛рдПрдВредрд╕рдВрдЧреНрд░рд╣рдг рдбреЗрдЯрд╛ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдирд╛
рджреВрд╕рд░реЗ рдЕрдзреНрдпрд╛рдп рдореЗрдВ, рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╣реА рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛ рд▓рд┐рдпрд╛ рдерд╛ sqlite3
рдХрд┐ рдХреЛрд░ рдбреЗрдЯрд╛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдЕрдзреНрдпрдпрди рдХреИрд╕реЗ рдХрд░реЗрдВ ред SQLite- рдкреНрд░рдХрд╛рд░ рдХреЗ рднрдВрдбрд╛рд░рдг рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреБрднрд╛рдЧ рдХреЗ рдЕрдВрдд рдореЗрдВ, рд╣рдо рдЕрдкрдиреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдвреВрдВрдвреЗрдВрдЧреЗ League_Manager.sqlite3
рдФрд░ sqlite3
рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рд╣рдорд╛рд░реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рдирд╛рдо рд╕реЗ рдЧреБрдЬрд░реЗрдВрдЧреЗред sqlite3 ./5.0/Applications/CE79C20B-4CBF-47C3тАУ9E7C- 9EC24FA22488/Documents/League_Manager.sqlite
рдЕрдкрдиреЗ рд▓реАрдЧ рдореИрдиреЗрдЬрд░ рдРрдк рдХреЛ рдЪрд╛рд▓реВ рд░рдЦреЗрдВ рддрд╛рдХрд┐ рдЖрдк sqlite3
рдЙрдирдХреЗ рдмреАрдЪ рд╕реНрд╡рд┐рдЪ рдХрд░ рд╕рдХреЗрдВ рдФрд░ рдЬреЛ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдЙрд╕рдХрд╛ рдЯреНрд░реИрдХ рд░рдЦ рд╕рдХреЗрдВредрд╢реБрд░реБрдЖрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдЯреЗрдмрд▓ рдмрдирд╛рдП рдЧрдП рдереЗ: sqlite> .tables ZPLAYER ZTEAM Z_METADATA Z_PRIMARYKEY
ZPLAYER
рд╕реНрдЯреЛрд░ рдбреЗрдЯрд╛ Player
; ZTEAM
- рд╕реНрдЯреЛрд░ рдбреЗрдЯрд╛ Team
редрддреАрди рдЯреАрдореЗрдВ рдмрдирд╛рдПрдВ: рдХреНрд░реВ (рдмреНрд▓реВ), рдлрд╛рдпрд░ (рд░реЗрдб), рд░реЗрд╡реЛрд▓реНрдпреВрд╢рди (рдЧреНрд░реАрди)редSQLite рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ, рд╡реЗ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдВрдЧреЗ (рдпрд╣ рдЗрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рдХрд┐рддрдиреЗ рдХрдорд╛рдВрдб рдмрдирд╛рдП рдФрд░ рдбрд┐рд▓реАрдЯ рдХрд┐рдП рд╣реИрдВ): sqlite> select * from ZTEAM; 1|2|3|Crew|Blue 2|2|1|Fire|Red 3|2|1|Revolution|Green
рдПрдХ рддреНрд╡рд░рд┐рдд рдЪреЗрдХ рд╢реЛ рдХреЗ рд░реВрдк рдореЗрдВ, рд▓реАрдЧ рдореИрдиреЗрдЬрд░ рдЖрд╡реЗрджрди рдореЗрдВ рдЕрднреА рддрдХ рдХреЛрдИ рдЦрд┐рд▓рд╛рдбрд╝реА рдирд╣реАрдВ рд╣реИрдВ: sqlite> select * from ZPLAYER;
рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ рдХреНрд░реВ рдЦрд┐рд▓рд╛рдбрд╝рд┐рдпреЛрдВ рдХреА рд╕реВрдЪреА рдЦреЛрд▓реЗрдВ рдФрд░ рддреАрди рдирдП рдЬреЛрдбрд╝реЗ: рдЬреЙрд░реНрдбрди рдЧреЙрд░реНрдбрди, рдкреИрдЯ рд╕реНрдкреНрд░рд╛рдЯ, рдмреИрд▓реА рд╕реНрдЯреЗрд▓реАред рдЦрд┐рд▓рд╛рдбрд╝рд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж рдЖрдкрдХреЛ рдЙрдиреНрд╣реЗрдВ рд╕реВрдЪреА рдореЗрдВ рджреЗрдЦрдирд╛ рд╣реЛрдЧрд╛ред
рд╣рдо sqlite3
рдЖрд╡реЗрджрди рдореЗрдВ рд╕рднреА рдЦрд┐рд▓рд╛рдбрд╝рд┐рдпреЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдорд╛рдВрдб рдХреЛ рдУрд╡рд░рдлрд┐рд▓ рдХрд░реЗрдВрдЧреЗ : sqlite> select * from ZPLAYER; 1|1|1|1|Jordan|Gordan|jgordon@example.com 2|1|1|1|Pat|Sprat|psprat@example.com 3|1|1|1|Bailey|Staley|bstaley@example.com
рдЕрдм рдлрд╛рдпрд░ рдЯреАрдо рдореЗрдВ рдПрдХ рдирдпрд╛ рдЦрд┐рд▓рд╛рдбрд╝реА рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдЙрд╕реЗ рдЯреЗрд░реА рдЧреИрд░реА рдХрд╣реЗрдВред рд╣рдо рд╕рднреА рдЯреАрдо рдХреЗ рдЦрд┐рд▓рд╛рдбрд╝рд┐рдпреЛрдВ рдФрд░ рдЙрд╕ рдЯреАрдо рдХрд╛ рдирд╛рдо рд╕реВрдЪреАрдмрджреНрдз рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рд╡рд╣ рдЦреЗрд▓рддрд╛ рд╣реИ: sqlite> select ZTEAM.ZNAME, ZPLAYER.ZFIRSTNAME, ZPLAYER.ZLASTNAME from ZTEAM, ZPLAYER where ZTEAM.Z_PK = ZPLAYER.ZTEAM; Crew|Jordan|Gordon Crew|Pat|Sprat Crew|Bailey|Staley Fire|Terry|Gary
рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЦреЛрд▓реЗрдВ, рдХреНрд░реВ рдХреЗ рдкреИрдЯ рд╕реНрдкреНрд░реИрдЯ рдХреА рд╕реНрдерд╛рдкрдирд╛ рд░рджреНрдж рдХрд░реЗрдВ, рдФрд░ рдЕрдиреБрд░реЛрдз рдХреЛ рдлрд┐рд░ рд╕реЗ рдЪрд▓рд╛рдПрдБ: sqlite> select ZTEAM.ZNAME, ZPLAYER.ZFIRSTNAME, ZPLAYER.ZLASTNAME from ZTEAM, ZPLAYER where ZTEAM.Z_PK = ZPLAYER.ZTEAM; Crew|Jordan|Gordon Crew|Bailey|Staley Fire|Terry|Gary
рдЕрдВрдд рдореЗрдВ, рдлрд╛рдпрд░ рдЯреАрдо рдХреЛ рд╣рдЯрд╛ рджреЗрдВ рдФрд░, рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдХреЗрд╡рд▓ рдЯреАрдо рд╣реА рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдЗрд╕рдХреЗ рдПрдХрдорд╛рддреНрд░ рдЦрд┐рд▓рд╛рдбрд╝реА рдЯреЗрд░реА рдЧреИрд░реА рднреА рдмрдЪреЗ: sqlite> select ZTEAM.ZNAME, ZPLAYER.ZFIRSTNAME, ZPLAYER.ZLASTNAME from ZTEAM, ZPLAYER where ZTEAM.Z_PK = ZPLAYER.ZTEAM; Crew|Jordan|Gordon Crew|Bailey|Staley
рдХреЛрд░ рдбреЗрдЯрд╛ рдХреЗ рд╣реБрдб рдХреЗ рдиреАрдЪреЗ рджреЗрдЦрдиреЗ рд╕реЗ рдбрд░реЛ рдорддредрдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЖрдкрдХрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЕрдкрдиреЗ рдбреЗрдЯрд╛ рд╡реЗрдпрд░рд╣рд╛рдЙрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ SQLite рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╕рдордЭрдирд╛ рдХрд┐ рдХреЛрд░ рдбреЗрдЯрд╛ рдЗрд╕рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЖрдкрдХреЛ рдХрдард┐рдирд╛рдЗрдпреЛрдВ рд╕реЗ рдмрдЪрдиреЗ рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИредрдЗрди-рдореЗрдореЛрд░реА рдкрд░рд╕реЗрдВрдЯ рд╕реНрдЯреЛрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
рдкрд┐рдЫрд▓реЗ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ, рд╣рдордиреЗ рдХреЛрд░ рдбреЗрдЯрд╛ рдФрд░ SQLite рдХреЛ рдбреЗрдЯрд╛ рд╡реЗрдпрд░рд╣рд╛рдЙрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдпрд╛ред рдпрд╣ рдЦрдВрдб рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рднрдВрдбрд╛рд░рдг рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рддрд╛ рд╣реИ: рдЗрди-рдореЗрдореЛрд░реА рдореЗрдореЛрд░реАред рдЖрдЗрдП рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рд╕реНрдЯреЛрд░ рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВредрдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рднрдВрдбрд╛рд░рдг рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдмрджрд▓рдирд╛ рд╕рд░рд▓ рд╣реИ, рдЗрд╕реЗ рдмрдирд╛рддреЗ рд╕рдордп рдХреЗрд╡рд▓ NSPersistentStoreCoordinator
рдПрдХ рдЕрд▓рдЧ рдкреНрд░рдХрд╛рд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ NSSQLiteStoreType
редрдпрд╣рд╛рдБ рдлрд╝рд╛рдЗрд▓ persistentStoreCoordinator:
рдореЗрдВ рд╕рдВрд╢реЛрдзрд┐рдд рд╡рд┐рдзрд┐ рдХреНрдпрд╛ рд╣реЛрдЧреА League_ManagerAppDelegate.m
: - (NSPersistentStoreCoordinator *)persistentStoreCoordinator { if(_persistentStoreCoordinator != nil) return _persistentStoreCoordinator;
рдбреЗрдЯрд╛ рд╕реНрдЯреЛрд░ рдкреНрд░рдХрд╛рд░ рдХреЛ рдореЗрдореЛрд░реА рдореЗрдореЛрд░реА рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИредрдкрд╣рд▓реА рдмрд╛рд░ рдЬрдм рд╣рдо рдЕрдЧрд▓реА рдмрд╛рд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рд╣реЛрдиреЗ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВрдЧреЗ, рдпрд╣ рд╣реИ рдХрд┐ рдкрд╣рд▓реЗ рдХреЗ рд╕рднреА рдЬреЛрдбрд╝реЗ рдЧрдП рдбреЗрдЯрд╛ рдЧрд╛рдпрдм рд╣реЛ рдЧрдП рд╣реИрдВред рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реБрдЖ рдХреНрдпреЛрдВрдХрд┐ рд╣рдордиреЗ рдбреЗрдЯрд╛ рд╡реЗрдпрд░рд╣рд╛рдЙрд╕ рдХрд╛ рдкреНрд░рдХрд╛рд░ рдмрджрд▓ рджрд┐рдпрд╛ рдФрд░ рдкреБрд░рд╛рдиреЗ рд╕реЗ рдирдП рдореЗрдВ рдбреЗрдЯрд╛ рдХреЛ рдорд╛рдЗрдЧреНрд░реЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдЕрдзреНрдпрд╛рдп 8 рдореЗрдВ, рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рджреЛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рдмреАрдЪ рдбреЗрдЯрд╛ рдХреЛ рдХреИрд╕реЗ рдорд╛рдЗрдЧреНрд░реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИредрдореЗрдореЛрд░реА рдореЗрдВ рднрдВрдбрд╛рд░рдг рдЬреАрд╡рди рдЪрдХреНрд░ рддрдм рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдХреЛрд░ рдбреЗрдЯрд╛ рд╕реНрдЯреИрдХ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЬрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдмрдВрдж рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИредрдЯрд┐рдкреНрдкрдгреАIOS 4 рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрдиреЗ рдФрд░ рдорд▓реНрдЯреАрдЯрд╛рд╕реНрдХрд┐рдВрдЧ рдХреА рд╢реБрд░реБрдЖрдд, рдХрд┐рд╕реА рдЕрдиреНрдп рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рд╕реЗ рдЬрд░реВрд░реА рдирд╣реАрдВ рдХрд┐ рдЖрдкрдХрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рдПред рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдХреЗ рдмрдЬрд╛рдп, рд╣рдорд╛рд░рд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ рдЪрд▓рддрд╛ рд░рд╣рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдореЗрдореЛрд░реА рдореЗрдВ рдбреЗрдЯрд╛ рдмрдирд╛ рд░рд╣рддрд╛ рд╣реИред
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдбреЗрдЯрд╛ рд╕реНрдЯреЛрд░реЗрдЬ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдирд╛, рдкрд╣рд▓реА рдмрд╛рд░ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рдореЗрдореЛрд░реА рдореЗрдореЛрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдРрд╕реА рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпрд╛рдВ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рджреВрд░рд╕реНрде рд╕рд░реНрд╡рд░ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдбреЗрдЯрд╛ рдХреА рд╕реНрдерд╛рдиреАрдп рдХреИрд╢рд┐рдВрдЧред рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдЬрд╣рд╛рдВ рдЖрдкрдХрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рджреВрд░рд╕реНрде рд╕рд░реНрд╡рд░ рд╕реЗ рдбреЗрдЯрд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдХрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЗрди рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рдЙрддреНрддрд░ рдХреЛ "рдЙрддреНрддрд░рджрд╛рдпреА" рдкреНрд░рдХрд╛рд░ рдХреЗ рднрдВрдбрд╛рд░рдг рдХреЛ рдЪреБрдирдХрд░ рдЧрддрд┐ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реИред рд░рд┐рдореЛрдЯ рд╕рд░реНрд╡рд░ рдбреЗрдЯрд╛ рдХреЛ рдПрдХ рд╕рдВрдкреАрдбрд╝рд┐рдд рд░реВрдк рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдореЛрдмрд╛рдЗрд▓ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░, рдбреЗрдЯрд╛ рдХреЛ рдЕрдирдкреИрдХ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдмрд╛рдж рдХреЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдЧрддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрдореЛрд░реА рдореЗрдВ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЙрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВрддрд╛рдХрд┐ рд╣рд░ рдмрд╛рд░ рдбреЗрдЯрд╛ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдП (рдпрд╛ рдХреБрдЫ рдЕрдВрддрд░рд╛рд▓ рдкрд░ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдП) рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╢рдЯрдбрд╛рдЙрди рдкрд░ рдбреЗрдЯрд╛ рд╣рд╛рдирд┐ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред
рдХреЛрд░ рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреЗ рдмрд╛рдж рдХреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╕рдордп, рдЗрди-рдореЗрдореЛрд░реА рд╕реНрдЯреЛрд░реЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ, рдЬрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд░рди рдХреЗ рдмреАрдЪ рдбреЗрдЯрд╛ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рдкрд╛рд░рдВрдкрд░рд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдЬрд┐рд╕рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рднрдВрдбрд╛рд░рдг рд▓реЛрдХрдкреНрд░рд┐рдп рдирд╣реАрдВ рд╣реЛрдЧрд╛редрдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рднрдВрдбрд╛рд░рдг рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╡рд┐рдХрд╛рд╕ рдХрд░рдирд╛
рдХреЛрд░ рдбреЗрдЯрд╛ рдХрд╛ рдореВрд▓ рд╕рд┐рджреНрдзрд╛рдВрдд рд╡рд╛рд╕реНрддрд╡рд┐рдХ рднрдВрдбрд╛рд░рдг рдХреЗ рдкреНрд░рдХрд╛рд░ рд╕реЗ рд╕рд╛рд░ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреА рдЕрдореВрд░реНрддрддрд╛ рдЖрдкрдХреЛ рдПрдХ рдкрдВрдХреНрддрд┐ рд╕реЗ рдЕрдзрд┐рдХ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд┐рдирд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдЖрдВрддрд░рд┐рдХ рднрдВрдбрд╛рд░рдг рдХреЗ рдкреНрд░рдХрд╛рд░ (NSSQLiteStoreType, NSInMemoryStoreType, NSBinaryStoreType) рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдбреЗрдЯрд╛ рд╡реЗрдпрд░рд╣рд╛рдЙрд╕ рдЖрдкрдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рдЕрдиреБрд░реВрдк рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХреЛрд░ рдбреЗрдЯрд╛ рдЖрдкрдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрд╣рд╛рд░ рд╣реИ - рд╕реНрд╡рдпрдВ рдбреЗрдЯрд╛ рд╡реЗрдпрд░рд╣рд╛рдЙрд╕ рдХрд╛ рдПрдХ рдордирдорд╛рдирд╛ рдкреНрд░рдХрд╛рд░ рдмрдирд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ред рдЗрд╕ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ, рд╣рдо рдПрдХ рдирдпрд╛ рд╕рдВрдЧреНрд░рд╣рдг рдкреНрд░рдХрд╛рд░ рдмрдирд╛рдПрдВрдЧреЗ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣рдорд╛рд░реЗ рд▓реАрдЧ рдореИрдиреЗрдЬрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдХрд░реЗрдВрдЧреЗредрдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдЧреЛрддрд╛ рд▓рдЧрд╛рдПрдБ, рдпрд╣ рдпрд╛рдж рд░рдЦрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдХреЛрд░ рдбреЗрдЯрд╛ рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдкрд░рдорд╛рдгреБ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИрднрдВрдбрд╛рд░рдг рдХреЗ рдкреНрд░рдХрд╛рд░ред рдкрд░рдорд╛рдгреБ рдкреНрд░рдХрд╛рд░ рдХрд╛ рднрдВрдбрд╛рд░рдг рд╡рд╣ рдкреНрд░рдХрд╛рд░ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕реЗрд╡ рдСрдкрд░реЗрд╢рди рдЕрдкрдиреА рдкреНрд░рддреНрдпреЗрдХ рдХреЙрд▓ рдХреЗ рд╕рднреА рдбреЗрдЯрд╛ рдХреЛ рдЙрд╕рдХреА рд╕рдВрдкреВрд░реНрдгрддрд╛ рдореЗрдВ рд╕рд╣реЗрдЬрддрд╛ рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЗрд╕ рддрд░рд╣ рдХреЗ рдкреНрд░рддрд┐рдмрдВрдз SQLite рдбреЗрдЯрд╛рдмреЗрд╕ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХреБрдЫ рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рдмрдирд╛рдиреЗ рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВред рдЗрд╕ рдЦрдВрдб рдореЗрдВ рд╣рдо рдПрдХ рдлрд╝рд╛рдЗрд▓ рдкреНрд░рдХрд╛рд░ рдХрд╛ рднрдВрдбрд╛рд░рдг рд╡рд┐рдХрд╕рд┐рдд рдХрд░реЗрдВрдЧреЗ, рдЗрд╕рдореЗрдВ рдбреЗрдЯрд╛ рдХреЙрдорд╛ рд╕реАрдорд╛рдВрдХрдХ (CSV) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рд╣рдо рдорд╛рдиреЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдКрд░реНрдзреНрд╡рд╛рдзрд░ рдмрд╛рд░ (!) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗредрдХрд╕реНрдЯрдо рдбреЗрдЯрд╛ рд╕реНрдЯреЛрд░ рдХреЛ рдПрдХ NSAtomicStore
рд╡рд░реНрдЧ (рдЙрдкрд╡рд░реНрдЧ NSPersistentStore
) рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдХреНрд╖рдорддрд╛рдУрдВ (рд╡рд┐рдзрд┐рдпреЛрдВ) рдХреЛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП, рдХреЛрд░ рдбреЗрдЯрд╛ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рдЕрдВрджрд░ рджреЛ рдЖрдВрддрд░рд┐рдХ рдкрд░рддреЛрдВ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдиреАрдЪреЗ рджреА рдЧрдИ рддрд╕реНрд╡реАрд░ рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд╕рд╛рде NSManagedObject
рдФрд░ рдмрд╛рддрдЪреАрдд рдХрд░рддрд╛ рд╣реИ NSManagedObjectContext
ред рджреВрд╕рд░реА рдкрд░рдд рд╕реАрдзреЗ рдбреЗрдЯрд╛ рдХреЛ рдмрдЪрд╛рддреА рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдбреЗрдЯрд╛ рд╡реЗрдпрд░рд╣рд╛рдЙрд╕ рдФрд░ рдбреЗрдЯрд╛ рд╡реЗрдпрд░рд╣рд╛рдЙрд╕ рд╕рдордиреНрд╡рдпрдХ рд╣реЛрддреЗ рд╣реИрдВред рдХрд╕реНрдЯрдо рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕реНрдЯреЛрд░реЗрдЬ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдбреЗрдЯрд╛ рд╡реЗрдпрд░рд╣рд╛рдЙрд╕ рдХреЗ рд╕рд╛рде рдкрд░рдд рднреА рд╢рд╛рдорд┐рд▓ рд╣реЛрддреА рд╣реИ NSAtomicStoreCacheNode
рдЬреЛ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдбреЗрдЯрд╛ рд╕реНрд╡рдпрдВ рд╣реЛрддрд╛ рд╣реИред рд░рд┐рд╢реНрддрд╛ NSAtomicStoreCacheNode
рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП NSAtomicStore
рдХреЗ рд░реВрдк рдореЗрдВ рд╣реА NSManagedObject
рдПрдХ NSManagedObjectContext
редрдХрд╕реНрдЯрдо рд╕рдВрдЧреНрд░рд╣рдг рдХреЛ рдкреНрд░рд╛рд░рдВрдн рдХрд░рдирд╛
рдирдпрд╛ рдХрд╕реНрдЯрдо рдбреЗрдЯрд╛ рд╡реЗрдпрд░рд╣рд╛рдЙрд╕ рдбрд┐рд╡рд╛рдЗрд╕ рд╕реНрдЯреЛрд░реЗрдЬ рдФрд░ NSAtomicStoreCacheNodes рдХреЗ рдмреАрдЪ рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде-рд╕рд╛рде NSManagedObjects рдФрд░ NSAtomicStoreCacheNodes рдХреЗ рдмреАрдЪ рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИредрдХрд╕реНрдЯрдо рдбреЗрдЯрд╛ рд╡реЗрдпрд░рд╣рд╛рдЙрд╕ рдмрдирд╛рдиреЗ рдХреА рджрд┐рд╢рд╛ рдореЗрдВ рдкрд╣рд▓рд╛ рдХрджрдо рдирдП рд╕реНрдЯреЛрд░реЗрдЬ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреНрд▓рд╛рд╕ рдмрдирд╛рдирд╛ рд╣реИред рдЗрд╕ рдЦрдВрдб рдореЗрдВ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХрд╕реНрдЯрдо рднрдВрдбрд╛рд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрдХреНрд╖рд╛ рдореЗрдВ рд╣реЛрдВрдЧреЗ CustomStore
ред рд▓реАрдЧ рдореИрдиреЗрдЬрд░ рдореЗрдВ рдПрдХ рдирдпрд╛ рд╡рд░реНрдЧ рдЬреЛрдбрд╝реЗрдВ рдЬреЛ NSAtomicStore рд╕реЗ рдЗрдирд╣реЗрд░рд┐рдЯ рдХрд░реЗрдЧрд╛редCustomStore.h #import <Foundation/Foundation.h> @interface CustomStore : NSAtomicStore { } @end
CustomStore.m #import "CustomStore.h" @implementation CustomStore #pragma mark - NSPersistentStore - (NSString *)type { return [[self metadata] objectForKey:NSStoreTypeKey]; } - (NSString *)identifier { return [[self metadata] objectForKey:NSStoreUUIDKey]; } - (id)initWithPersistentStoreCoordinator:(NSPersistentStoreCoordinator *)coordinator configurationName:(NSString *)configurationName URL:(NSURL *)url options:(NSDictionary *)options { self = [super initWithPersistentStoreCoordinator:coordinator configurationName:configurationName URL:url options:options]; return self; } + (NSDictionary *)metadataForPersistentStoreWithURL:(NSURL *)url error:(NSError **)error { return nil; } #pragma mark - NSAtomicStore - (BOOL)load:(NSError **)error { return YES; } - (id)newReferenceObjectForManagedObject:(NSManagedObject *)managedObject { return nil; } - (NSAtomicStoreCacheNode *)newCacheNodeForManagedObject:(NSManagedObject *)managedObject { return nil; } - (BOOL)save:(NSError **)error { return YES; } - (void)updateCacheNode:(NSAtomicStoreCacheNode *)node fromManagedObject:(NSManagedObject *)managedObject { } @end
рдХреЛрд░ рдбреЗрдЯрд╛ рдХреЗ рд╕рднреА рд╕реНрдЯреЛрд░реЗрдЬ рдореЗрдВ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдХрд╛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реЗрдЯ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ NSPersistentStoreCoordinator'
рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕реНрдЯреЛрд░реЗрдЬ рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ ред NSPersistentStore
рдореЗрдЯрд╛рдбрд╛рдЯрд╛ рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ NSDictionary
ред рджреЛ рдХреБрдВрдЬреА рдХреЗ рдореВрд▓реНрдп рд╡рд┐рд╢реЗрд╖ рд░реБрдЪрд┐ рдХреЗ рд╣реИрдВ: NSStoreTypeKey
рдФрд░ NSStoreUUIDKey
ред рдХреБрдВрдЬреА рдХреЗ рд▓рд┐рдП рдореВрд▓реНрдп NSStoreTypeKey
рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рд╕реНрдЯреЛрд░реЗрдЬ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рддрд╛ рд╣реИ, рдФрд░ NSStoreUUIDKey
рд╕реАрдзреЗ рд╕реНрдЯреЛрд░реЗрдЬредрд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрди рд╡рд░реНрдЧ рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝реЗрдВ: + (NSString *)makeUUID { CFUUIDRef uuidRef = CFUUIDCreate(NULL); CFStringRef uuidStringRef = CFUUIDCreateString(NULL, uuidRef); CFRelease(uuidRef); NSString *uuid = [NSString stringWithString:(__bridge NSString *)uuidStringRef]; CFRelease(uuidStriingRef); return uuid; }
рдЗрд╕ рдЕрдзреНрдпрд╛рдп рдореЗрдВ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдХрд╕реНрдЯрдо рдбреЗрдЯрд╛ рд╡реЗрдпрд░рд╣рд╛рдЙрд╕ рдХреЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рдлрд╛рдЗрд▓реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдкрд╣рд▓реА рдлрд╝рд╛рдЗрд▓, рдЬрд┐рд╕рдореЗрдВ txt рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдбреЗрдЯрд╛ рд╕реНрд╡рдпрдВ рд╣реИ; рджреВрд╕рд░реА рдлрд╝рд╛рдЗрд▓, рдЬрд┐рд╕рдореЗрдВ рдкреНрд▓рд┐рд╕реНрдЯ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╣реИ, рдореЗрдВ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рд╣реИред рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдФрд░ рд╕рд╣реЗрдЬрдиреЗ рдХреЗ рдореБрджреНрджреЗ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдФрд░ рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝реЗрдВрдЧреЗ рдФрд░ рд╡рд┐рдзрд┐ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдкреВрд░рд╛ рдХрд░реЗрдВрдЧреЗ metadataForPersistentStoreWithURL:error:
редрдирд┐рдореНрди рд╡рд┐рдзрд┐ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдлрд╝рд╛рдЗрд▓ рд╕рд╣реЗрдЬрддреА рд╣реИ: + (void)writeMetadata:(NSDictionary *)metadata toURL:(NSURL *)url { NSString *path = [[url relativePath] stringByAppendingString:@".plist"]; [metadata writeToFile:path atomically:YES]; }
рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдкрд╣рд▓реА рдбрд╛рдЙрдирд▓реЛрдб (рдПрдХреНрд╕реЗрд╕) рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдкрдХреЛ рдПрдХ рдЦрд╛рд▓реА рдбреЗрдЯрд╛ рдлрд╝рд╛рдЗрд▓ (рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ txt) рдХреЗ рд╕рд╛рде рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдХреЛрд░ рдбрд╛рдЯрд╛ рдореЗрдЯрд╛рдбрд╛рдЯрд╛ рднрдВрдбрд╛рд░ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ UUID рд╣реИ, рдЬреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ, рдХреИрд╕реЗ рднрдВрдбрд╛рд░рдг рдХреЗ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ, рддреЛ рдЖрдк рдорд╛рди рдЪрд╛рдмреА рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреА рдЙрдореНрдореАрдж рд╣реИ NSStoreTypeKey
, NSStoreUUIDKey
ред рд╡рд┐рдзрд┐ рдвреВрдВрдвреЗрдВ metadataForPersistentStoreWithURL:error:
рдФрд░ рдЗрд╕рдХреЗ рд╢рд░реАрд░ рдХреЛ рдмрджрд▓реЗрдВ рддрд╛рдХрд┐ рдпрд╣ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдлрд╝рд╛рдЗрд▓ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдЬрд╛рдВрдЪ рдХрд░реЗ рдФрд░, рдЕрдЧрд░ рдРрд╕реА рдХреЛрдИ рдлрд╝рд╛рдЗрд▓ рдирд╣реАрдВ рд╣реИ, рддреЛ рдпрд╣ рдПрдХ рдЦрд╛рд▓реА рднрдВрдбрд╛рд░рдг рдлрд╝рд╛рдЗрд▓ (рдкрд╛рда рдлрд╝рд╛рдЗрд▓) рдХреЗ рд╕рд╛рде рдмрдирд╛рдИ рдЧрдИ рд╣реИ (рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде)ред + (NSDictionary *)metadataForPersistentStoreWithURL:(NSURL *)url error:(NSError **)error {
рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдХреЛ рд▓реЛрдб / рд╕реЗрд╡ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ, рд╣рдо рдПрдХ рдХрд╕реНрдЯрдо рдбреЗрдЯрд╛ рд╡реЗрдпрд░рд╣рд╛рдЙрд╕ рдХреА рдЖрд░рдВрднреАрдХрд░рдг рд╡рд┐рдзрд┐ рдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдкреВрд░рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: - (id)initWithPersistentStoreCoordinator:(NSPersistentStoreCoordinator *)coordinator configurationName:(NSString *)configurationName URL:(NSURL *)url options:(NSDictionary *)options { self = [super initWithPersistentStoreCoordinator:coordinator configurationName:configurationName URL:url options:options]; NSDictionary *metadata = [CustomStore metadataForPersistentStoreWithURL:[self URL] error:nil]; [self setMetadata:metadata]; return self; }
NSManagedObject рдФрд░ NSAtomicStoreCacheNode рдХреЗ рдмреАрдЪ рд╕рдВрдмрдВрдз
рд╣рдорд╛рд░реЗ рдХрд╕реНрдЯрдо рдбреЗрдЯрд╛ рд╡реЗрдпрд░рд╣рд╛рдЙрд╕ рдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛рдиреБрд╕рд╛рд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рддреАрди рдЕрддрд┐рд░рд┐рдХреНрдд рддрд░реАрдХреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдкрд╣рд▓рд╛ рдкрд╛рд╕ рдХрд┐рдП рдЧрдП рдХреЗ рд▓рд┐рдП рдПрдХ рдирдИ рд╕рдВрджрд░реНрдн рд╡рд╕реНрддреБ рдмрдирд╛рддрд╛ рд╣реИ NSManagedObject'
ред рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдирд╛ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рд╣реИ NSAtomicStoreCacheNode'
(рдкреНрд░рд╛рдердорд┐рдХ рдХреБрдВрдЬреА рдХреЗ рд╕рдорд╛рди, рд╕рдВрдмрдВрдз рд╕рдорд╛рди NSObjectID
рд╣реИ NSManagedObject
)ред рдЪреВрдВрдХрд┐ рдХрд╕реНрдЯрдо рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рдмреАрдЪ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ NSManagedObject'
рд╣реИ NSAtomicStoreCacheNode
, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдирдП рдмрдирд╛рдП рдЧрдП рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрджрд░реНрдн рд╡рд╕реНрддреБ рдмрдирд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП NSManagedObject'
ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдлрд┐рд░ рд╕реЗ UUID рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ: - (id)newReferenceObjectForManagedObject:(NSManagedObject *)managedObject { NSString *uuid = [CustomStore makeUUID]; return uuid; }
рджреВрд╕рд░реА рд╡рд┐рдзрд┐, рдЬреЛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИ, NSAtomicStoreCacheNode
рд╕рдВрдмрдВрдзрд┐рдд NSManagedObject
рд╡рд╕реНрддреБ рдХреЗ рд▓рд┐рдП рдХрдХреНрд╖рд╛ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рддреА рд╣реИ ред рдЬрдм рдПрдХ рдирдпрд╛ NSManagedObject
рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдврд╛рдВрдЪреЗ рдХреЛ рдЗрд╕реЗ рдмрдЪрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рд╡рд┐рдзрд┐ рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ newReferenceObjectForManagedObject:
ред рд╡рд╕реНрддреБрдУрдВ рдХреЗ NSAtomicCache
рдмреАрдЪ рд╕рдВрдмрдВрдзреЛрдВ рдХреЛ NSObjectID
рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЬрдм Core Data NSManagedObject рдХреЛ рд╕реНрдерд╛рдиреАрдп рд╕рдВрдЧреНрд░рд╣рдг рдореЗрдВ рд╕рд╣реЗрдЬрддрд╛ рд╣реИ, рддреЛ рд╡рд┐рдзрд┐ рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ newCacheNodeForManagedObject:
, рдЬреЛ, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЗрд╕рдХреЗ рдирд╛рдо рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдПрдХ рдирдпрд╛ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рддрд╛ рд╣реИ NSAtomicStoreCacheNode
рдЬреЛ NSManagedObject рдХреЗ рдПрдирд╛рд▓реЙрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред - (NSAtomicStoreCacheNode *)newCacheNodeForManagedObject:(NSManagedObject *)managedObject { NSManagedObjectID *oid = [managedObject objectID]; id referenceID = [self referenceObjectForObjectID:oid]; NSAtomicStoreCacheNode* node = [self nodeForReferenceObject:referenceID andObjectID:oid]; [self updateCacheNode:node fromManagedObject:managedObject]; return node; }
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди newCacheNodeForManagedObject:
рд╕рдВрдмрдВрдзрд┐рдд NSManagedObject рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдИ рдЧрдИ рд╕рдВрджрд░реНрднрд┐рдд рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдЦреЛрдЬ рдХрд░рддрд╛ рд╣реИ, рдФрд░ NSManagedObject рдЙрджрд╛рд╣рд░рдг рд╕реЗ рд╕рднреА рдлрд╝реАрд▓реНрдб рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рддреЗ рд╣реБрдП рдПрдХ рдирдпрд╛ NSAtomicStoreCacheNode рдмрдирд╛рддрд╛ рд╣реИред