๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐ŸŽ iOS & ๐Ÿ”น Flutter/๐Ÿ”ฅ ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ…

[iOS] storyboard์—์„œ custom init์„ ํ•œ ๊ฒฝ์šฐ required init์ด ํ•„์š”ํ•œ ์ด์œ 

by MINT09 2023. 11. 9.

view controller์—์„œ init์„ ์ƒ์„ฑํ•ด์ฃผ๋ ค๋ฉด ์™œ required init์ด ํ•„์š”ํ• ๊นŒ? required init์€ ํ•„์ˆ˜ ์ƒ์„ฑ์ž๋กœ ๋ถ€๋ชจ ํด๋ž˜์Šค์— ์ƒ์„ฑ๋˜์–ด ์žˆ๋‹ค๋ฉด ์ž์‹ ํด๋ž˜์Šค์—์„œ๋Š” ํ•„์ˆ˜๋กœ ์ƒ์„ฑํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค. ๋‹จ, ์ง€์ • ์ƒ์„ฑ์ž๋ฅผ ๋”ฐ๋กœ ์ž‘์„ฑํ•˜๋Š” ๊ฒฝ์šฐ์—๋งŒ. ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž๋“ค์„ ๊ทธ๋Œ€๋กœ ๋ฐ›์„ ๊ฒฝ์šฐ์—๋Š” ๋”ฐ๋กœ ์ƒ์„ฑํ•ด ์ค„ ํ•„์š”๊ฐ€ ์—†๋‹ค.

view controller๋Š” UIViewController๋ฅผ ์ƒ์†๋ฐ›๋Š”๋‹ค.

class firstViewController: UIViewController

๊ทธ๋ฆฌ๊ณ  UIViewController๋Š” NSCoding์ด๋ผ๋Š” ํ”„๋กœํ† ์ฝœ์„ ์ฑ„ํƒํ•˜๊ณ  ์žˆ๋‹ค.

class UIViewController: NSCoding

์ด NSCoding ํ”„๋กœํ† ์ฝœ์—๋Š” required init์œผ๋กœ NSCoder๋ฅผ ์„ ์–ธํ•˜๊ณ  ์žˆ๋‹ค.

required init?(coder: NSCoder)

NSCoder๋Š” ์Šคํ† ๋ฆฌ๋ณด๋“œ๋กœ ๊ตฌ์„ฑํ•œ UI ํ˜•ํƒœ๋ฅผ ์ €์žฅํ•œ ํŒŒ์ผ์„ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ์นœ๊ตฌ์ด๋‹ค. (xmlํ˜•ํƒœ)

์ฆ‰ ์Šคํ† ๋ฆฌ๋ณด๋“œ๋กœ ์ž‘์„ฑํ•  ๋•Œ required init?(coder: NSCoder)์€ ํ•„์ˆ˜์ ์œผ๋กœ ํ•„์š”ํ•œ๋ฐ, ๋‹จ์ˆœํžˆ ์Šคํ† ๋ฆฌ๋ณด๋“œ๋กœ๋งŒ ๋ทฐ๋ฅผ ์ž‘์„ฑํ•˜๊ฑฐ๋‚˜ ํ•  ๋•Œ๋Š” ์„ ์–ธํ•  ํ•„์š”๊ฐ€ ์—†์ง€๋งŒ ์ฝ”๋“œ๋กœ init์„ ๋„ฃ์–ด์ฃผ๊ฒŒ ๋œ๋‹ค๋ฉด ์ด๋Š” ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž๋“ค์„ ๊ทธ๋Œ€๋กœ ์ƒ์†๋ฐ›์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— required init์„ ๋”ฐ๋กœ ์ƒ์„ฑํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

→ ๊ทธ๋Ÿฐ๋ฐ ์ฒซ๋ฒˆ์งธ view Controller์—์„œ init์„ ๋„ฃ์œผ๋‹ˆ required init์—์„œ ์ž๊พธ ๋ฉˆ์ท„๋‹ค. Main ์Šคํ† ๋ฆฌ๋ณด๋“œ์™€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๊ธฐ์— ์ด ์Šคํ† ๋ฆฌ๋ณด๋“œ์™€ ๊ทธ ์Šคํ† ๋ฆฌ๋ณด๋“œ์˜ xml ํŒŒ์ผ์„ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ ์œ„ํ•ด NSCoder๋ฅผ ์„ ์–ธํ•ด์ฃผ๋Š” required init์—์„œ ๊ณ„์† fatal Error๊ฐ€ ๋œฌ ๊ฒƒ์ด๋ผ๊ณ  ์ดํ•ดํ–ˆ๋‹ค. ๊ทธ๋ž˜์„œ required init์— ๋‚ด๊ฐ€ ๋„ฃ์–ด์ฃผ๊ณ  ์‹ถ์€ ์ •๋ณด๋ฅผ ๋„ฃ์œผ๋ฉด ์Šคํ† ๋ฆฌ๋ณด๋“œ๋ฅผ ์ฐพ๊ณ , ๊ทธ ์Šคํ† ๋ฆฌ๋ณด๋“œ์˜ xml ํ˜•ํƒœ ํŒŒ์ผ์„ ์ฐพ๊ณ , ์ด ๋‘๊ฐ€์ง€๋ฅผ ๋‚ด๊ฐ€ ๋„ฃ์–ด์ฃผ๊ณ  ์‹ถ์€ ์ •๋ณด์™€ ํ•จ๊ป˜ ๋„ฃ์–ด์„œ ์ด view controller๋ฅผ ์ƒ์„ฑํ•ด์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.

→ ๋‘๋ฒˆ์งธ view controller๋ฅผ ๋ถ€๋ฅผ ๋•Œ๋„ required init์—์„œ ๋ฉˆ์ท„๋Š”๋ฐ, ์ด๋„ ๋น„์Šทํ•œ ์ด์œ  ๊ฐ™๋‹ค. navigation Controller์˜ push๋กœ ๋„˜๊ธธ ๋•Œ

instantiateViewController(identifier:creator:)

์ด๊ฒƒ์„ ์‚ฌ์šฉํ•˜๋Š”๋ฐ idetifier๋กœ ์Šคํ† ๋ฆฌ๋ณด๋“œ๋ฅผ ์ฐพ์•„์ฃผ๊ณ  ๊ทธ ์Šคํ† ๋ฆฌ๋ณด๋“œ์˜ xml ํ˜•ํƒœ์˜ ํŒŒ์ผ์„ ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ์ •๋ณด์™€ ๊ฐ™์ด ์ƒ์„ฑํ•ด์ฃผ๊ธฐ ์œ„ํ•ด NSCoder๊ฐ€ ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ–ˆ๋˜ ๊ฒƒ ๊ฐ™๋‹ค.