๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐ŸŽ iOS

[iOS, Swift] AppDelegate์—์„œ window์˜ rootViewController ์„ค์ •ํ•˜๊ธฐ

by ํ‹ด๋”” 2020. 8. 27.
728x90
๋ฐ˜์‘ํ˜•

  Swift ํ”„๋กœ์ ํŠธ๋ฅผ ์ฒ˜์Œ ์ƒ์„ฑํ•˜๊ณ  ๋นŒ๋“œํ•˜์—ฌ ์‹คํ–‰ํ•˜๋ฉด ์ฒซํ™”๋ฉด์ด Main.storyboard๋กœ ์„ค์ •๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋•Œ ๊ธฐ๋ณธ์ ์œผ๋กœ ํŒŒ์ผ์— ์žˆ๋Š” ViewController.swift ๋ง๊ณ  ์ž์‹ ์ด ์ƒ์„ฑํ•œ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ window์˜ root view controller๋กœ ์„ค์ •ํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•  ๊นŒ์š”? ๋˜ํ•œ ์•ฑ ์‹œ์ž‘๊ณผ ๋™์‹œ์— ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ๋กœ๋“œํ•˜๋ฉด์„œ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ํ•„์š”ํ•œ ์ดˆ๊ธฐ๊ฐ’์ด ์žˆ๋‹ค๋ฉด?! ์ด๋•Œ๋Š” AppDelegate์— ์ฝ”๋“œ ๋ช‡ ์ค„์„ ์ถ”๊ฐ€ํ•ด ์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. 

 

  ์ œ๊ฐ€ ํ˜„์žฌ ๊ณต๋ถ€ํ•˜๊ณ  ์žˆ๋Š” ์ฑ…์€ the big nerd ranch guide ios programming์˜ ๋ช‡ ๋…„ ์ง€๋‚œ ์ฑ…์ž…๋‹ˆ๋‹ค. ์ฑ… ๋Œ€๋กœ ๋”ฐ๋ผํ•˜๋‹ˆ xcode๊ฐ€ ์˜ˆ์ „๊ณผ ๋ฐ”๊ปด ์˜ค๋ฅ˜๊ฐ€ ์ƒ๊ธฐ๋”๋ผ๊ตฌ์š”. ๊ทธ๋ž˜์„œ ์ด๋ฒˆ์— ์˜ˆ์ „ xcode์—๋Š” ์žˆ๋˜ window๋„ ์„ ์–ธํ•ด ์ค˜์•ผ ํ•˜๊ณ  ์ ์—ˆ๋”๋‹ˆ window๋Š” nil๋กœ ๋œจ๊ณ  ๊ทธ๋ž˜์„œ! ์ด ๊ธฐํšŒ์— ์˜ค๋ฅ˜๋“ค์„ ์ •๋ฆฌํ•ด ๋ด…๋‹ˆ๋‹ค.

 

(์ฃผ์˜! ํŠœํ† ๋ฆฌ์–ผ์ด ์•„๋‹ˆ๋ผ ์ฐธ๊ณ ํ•˜์‹œ๋Š”๋ฐ ๋ถˆํŽธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค)


 

์šฐ์„  ItemsViewController.swift ํŒŒ์ผ์„ ์ƒ์„ฑํ•ด ์ค๋‹ˆ๋‹ค. ์ด ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๋Š” TableViewController์ด๋ฉฐ

window์˜ root view controller๋กœ ์ง€์ •ํ•ด ์ค„ ์Šค์œ„ํ”„ํŠธ ํŒŒ์ผ์ž…๋‹ˆ๋‹ค. 

Main.storyboard๋กœ ๊ฐ€์„œ ์›๋ž˜ ์žˆ๋˜ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์ง€์šฐ๊ณ 

Table View Controller๋ฅผ ์ถ”๊ฐ€ํ•ด ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.

 

ํ•ด๋‹น ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ์˜ ๋…(?)์ด๋ผ๊ณ  ํ•˜๋‚˜์š”??

๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ์˜ ์ƒ๋‹จ์— ์žˆ๋Š”

์ด๋ ‡๊ฒŒ ์ƒ๊ธด ์•„์ด๋ฅผ ๋ˆŒ๋Ÿฌ์ฃผ๊ฑฐ๋‚˜ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ ์ „์ฒด๋ฅผ ๋“œ๋ž˜๊ทธ ํ•œ ํ›„

indicator์—์„œ Custom Class ์— ์ƒ์„ฑํ•œ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ ํŒŒ์ผ ๋ช…์„ ์ ์–ด ์ค๋‹ˆ๋‹ค

์Šค์œ„ํ”„ํŠธ ํŒŒ์ผ์—์„œ ํ•„์š”ํ•œ delegate์™€ datasource๋ฅผ ๊ตฌํ˜„ํ•ด ์ค๋‹ˆ๋‹ค.

table view controller๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ

์žฌ์‚ฌ์šฉํ•  ์…€์˜ ์‹๋ณ„์ž๋„ ์ ์–ด ์ค๋‹ˆ๋‹ค. 

ํ•ด๋‹น ์‹๋ณ„์ž๋Š” ์Šคํ† ๋ฆฌ ๋ณด๋“œ์—์„œ ์…€์„ ๋ˆ„๋ฅด๊ณ  Identifier์— ์ง€์ •ํ•ด ์ฃผ์–ด์•ผ ์—๋Ÿฌ๊ฐ€ ๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.


์ž ์ด์ œ ์˜ค๋ฅ˜๋“ค์„ ํ•ด๊ฒฐํ•ด ๋‚˜๊ฐ€๋ด…๋‹ˆ๋‹ค.

์ƒ์„ฑํ•œ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ๋ฃจํŠธ๋ทฐ๋กœ ์ง€์ •ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋ช‡ ๊ฐ€์ง€ ํ•ด์ค˜์•ผ ํ•  ๊ฒƒ๋“ค์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์šฐ์„ ์€ ํ”„๋กœ์ ํŠธ์˜ Info.pilistํŒŒ์ผ์— ๋“ค์–ด๊ฐ€ ์ค๋‹ˆ๋‹ค.

Sene Configuration ์„ ์ง€์›Œ ์ค๋‹ˆ๋‹ค.

 

AppDelegate.swift๋กœ ์ด๋™ํ•œ ๋’ค

๊ตฌํ˜„ํ•˜์ง€ ์•Š์„ ๋‘ ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ญ์ œํ•ด ์ค๋‹ˆ๋‹ค.

MARK: UISeneSession Lifecycle ์•„๋ž˜์— ์žˆ๋Š” ๋ฉ”์†Œ๋“œ๋“ค์„ ์‚ญ์ œํ•ด ์ฃผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์ด์ „ xcode์—์„œ๋Š” window๊ฐ€ ๋ฏธ๋ฆฌ ์„ ์–ธ ๋˜์–ด ์žˆ์—ˆ๊ธฐ์—

์ฑ…๋งŒ ๋ณด๊ณ  ์ง„ํ–‰ํ•˜๋‹ˆ ์˜ค๋ฅ˜๊ฐ€ ์ƒ๊น๋‹ˆ๋‹ค

AppDelegate์—์„œ window๋ฅผ ์„ ์–ธํ•ด ์ค๋‹ˆ๋‹ค.

application(_:configurationForConnecting:options:)

๋ฉ”์†Œ๋“œ์— ํ•ด๋‹น ์ฝ”๋“œ๋ฅผ ์ ์–ด ์ค๋‹ˆ๋‹ค

storyboard๋ฅผ ์ด์šฉํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์œ„์™€ ๊ฐ™์ด ์ ๊ณ 

as! ๋’ค์— ์ž์‹ ์ด ์ƒ์„ฑํ•œ ์Šค์œ„ํ”„ํŠธ ํŒŒ์ผ ๋ช…์„ ์ ์–ด ์ฃผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

ํ•ด๋‹น ๋ถ€๋ถ„์€ ์ฑ…์— ์žˆ๋Š” ๋‚ด์šฉ์ธ๋ฐ 

์ฒ˜์Œ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ๋กœ๋“œํ•˜๋ฉด์„œ ์ดˆ๊ธฐ ๋ฐ์ดํ„ฐ๋ฅผ ์„ค์ •ํ•ด ์ฃผ๋Š” ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.

์œ„์—์„œ as!๋’ค์— ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ๋ช…์‹œํ•˜์ง€ ์•Š์œผ๋ฉด

(as? as! as ํฌ์ŠคํŒ…์€ ๋‹ค์Œ ๊ธฐํšŒ์—)

ํ”„๋กœํผํ‹ฐ๋“ค์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†์–ด์š”

ํ•ด๋‹น ๋ณ€์ˆ˜๊ฐ€ ์–ด๋–ค ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š”์ง€ ์•Œ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์ด์—์š”

์ด์ œ ๋ฃจํŠธ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๋กœ ์„ค์ •ํ•ด ์ค๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์— ์Šคํ† ๋ฆฌ๋ณด๋“œ identity๊ฐ€ ์—†๋‹ค๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋‚˜์„œ

Identity์— StoryboardID๋ฅผ ์ ์–ด ์ค๋‹ˆ๋‹ค. 

AppDelegate์—์„œ instantiateViewController์— ์ ์–ด์ค€ identity์™€ ๋™์ผํ•˜๊ฒŒ ์ ์–ด ์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์›ํ•˜๋Š” ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์ฒ˜์Œ ํ™”๋ฉด์— ๋ณด์—ฌ ์ค„ ์ˆ˜ ์žˆ๊ณ 

๋ฐ์ดํ„ฐ๋„ ์ง€์ •ํ•˜์—ฌ ํ™”๋ฉด์— ๋ฟŒ๋ ค ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค


>>> ํ‹€๋ฆฐ๋‚ด์šฉ์ด๋‚˜ ์ด์ƒํ•œ ๋ถ€๋ถ„์ด ์žˆ๋‹ค๋ฉด ์•Œ๋ ค ๊ผญ ์•Œ๋ ค ์ฃผ์„ธ์š”! ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

728x90
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€