๐Ÿคฉ ์•ˆ๋…•ํ•˜์„ธ์š” @junbangg woong, jeremy ์ž…๋‹ˆ๋‹ค. ์กฐ๊ธˆ ๋Šฆ์€๊ฐ์ด์žˆ์ง€๋งŒ step3๊นŒ์ง€ ๊ผญ ์™„๋ฃŒํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค! Step2 ์™„๋ฃŒํ•˜์—ฌ PR๋“œ๋ฆฝ๋‹ˆ๋‹ค. ## ๐Ÿค”๊ณ ๋ฏผํ•œ ๋ถ€๋ถ„ ๐Ÿ“Ž tableViewDatasoruce -> DiffableDataSource๋กœ ๋ณ€๊ฒฝ ## ๐Ÿ’ญ ๊ถ๊ธˆํ•œ ๋ถ€๋ถ„ ### ๐Ÿ“Ž ๋ฐฑ๊ทธ๋ผ์šด๋“œ๋กœ ์ง„์ž…ํ•˜๋Š” ๊ฒƒ์„ ๊ฐ์ง€ํ•˜๋Š” ๋ฐฉ๋ฒ• 1. ๋ฐฑ๊ทธ๋ผ์šด๋“œ๋กœ ๊ฐ€๋Š” ์•Œ๋ฆผ์„ ์ฐพ์•„๋ณด๋Š” ์ค‘ ๋‘๊ฐ€์ง€ ๋ฐฉ๋ฒ•์„ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค. 2. Notification์„ ํ™œ์šฉํ•˜์—ฌ ์•ฑ์ด ๋ฐฑ๊ทธ๋ผ์šด๋“œ ํ˜น์€ ๋น„ํ™œ์„ฑํ™” ์ƒํƒœ๊ฐ€ ๋˜์—ˆ์„ ๋•Œ ํ˜ธ์ถœํ•˜๋Š” notification์ž…๋‹ˆ๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค. **UIScene์„ ํ™œ์šฉ** ```swift NotificationCenter.default.addObserver(self, selector: #selector(sceneWillDeactivate), name: UIScene.willDeactivateNotification, object: nil) ``` **UIApplication์„ ํ™œ์šฉ** ```swift NotificationCenter.default.addObserver(self, selector: #selector(applicationWillInActive(_ :)), name: UIApplication.willResignActiveNotification, object: nil) ``` 3. ๋‘ Notification์ด ํ˜ธ์ถœ๋˜๋Š” ์กฐ๊ฑด์€ ์•Œ๊ฒ ์œผ๋‚˜, ๋‘๊ฐœ์˜ ์ฐจ์ด๊ฐ€ ์ดํ•ด๊ฐ€ ๊ฐ€์ง€ ์•Š์Šต๋‹ˆ๋‹ค. 4. stackOverFlow ํ˜น์€ ํƒ€ ๋ธ”๋กœ๊ทธ๋ฅผ ์ฐธ์กฐํ–ˆ์„ ๋•Œ, "์•ฑํƒ€๊ฒŸ์ด 13์ด์ƒ์ด๋ฉด UIScene๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, 12์ดํ•˜๋ผ๋ฉด UIApplication์„ ์‚ฌ์šฉํ•˜๋ผ." ๋ผ๋Š” ๋ง์ด ์žˆ์—ˆ์ง€๋งŒ ๋‘˜ ๋‹ค ์ž‘๋™ํ•˜๋Š”๋ฐ ์™œ ๊ทธ๋ ‡๊ฒŒ ํ•ด์•ผํ•˜์ง€? ๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. https://stackoverflow.com/questions/34744783/detect-ios-app-entering-background 5. ์งˆ๋ฌธ์š”์•ฝ : ๋ฐฑ๊ทธ๋ผ์šด๋“œ๋กœ ์ง„์ž…ํ•˜๋Š” ๊ฒƒ์„ ๊ฐ์ง€ํ•  ๋•Œ, iOS13์ด์ƒ์ด๋ฉด UIScene.willResignActiveNotification์œผ๋กœ ์ฒ˜๋ฆฌํ•ด์•ผํ•˜๋Š” ์ด์œ ๊ฐ€ ๋ฌด์—‡์ธ๊ฐ€์š”? ### ๐Ÿ“Ž snapShot์„ ์™œ reload ํ•ด์ค˜์•ผํ•˜๋Š”๊ฐ€? ```swift private func configureSnapshot() { var snapShot = NSDiffableDataSourceSnapshot<Section, DiaryData>() snapShot.appendSections([.main]) snapShot.appendItems(diaryData) snapShot.reloadSections([.main]) // ์„น์…˜์„ ๋ฆฌ๋กœ๋“œํ•˜๋Š” ๋ฉ”์„œ๋“œ dataSource?.apply(snapShot) } ``` 1. ๋‹ค์ด์–ด๋ฆฌ๋ฅผ ์ƒ์„ฑํ•˜๊ณ , DiaryViewController๋กœ ๋‹ค์‹œ ๋Œ์•„์™”์„ ๋•Œ, ํ…Œ์ด๋ธ”๋ทฐ๊ฐ€ ์—…๋ฐ์ดํŠธ๋ฅผ ๋ฐ˜์˜ํ•˜์ง€ ์•Š๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. 2. ํ•˜์ง€๋งŒ, ์œ„ ์ฝ”๋“œ์™€ ๋™์ผํ•˜๊ฒŒ `์„น์…˜์„ ๋ฆฌ๋กœ๋“œํ•˜๋Š” ๋ฉ”์„œ๋“œ`๋ฅผ ์ถ”๊ฐ€์ ์œผ๋กœ ๊ตฌํ˜„ํ•ด์ฃผ๋‹ˆ ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•˜์˜€์Šต๋‹ˆ๋‹ค. 3. ๊ทผ๋ฐ ๋ฆฌ๋กœ๋“œ๋ฅผ ํ•ด์ค˜์•ผํ•˜๋Š” ์ด์œ ๊ฐ€ ์˜์•„ํ•ฉ๋‹ˆ๋‹ค. 4. ์Šค๋ƒ…์ƒท์˜ ์ •์˜๋Š” `ํŠน์ •์‹œ์ ์—์„œ์˜ ๋ทฐ์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ์˜ ์ƒํƒœ๋ฅผ ๋ณด์—ฌ์ค€๋‹ค.` ์ฆ‰, `diaryData`๊ฐ€ ๋ฐ”๋€Œ์–ด์ง„ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์‹œ์ ์—์„œ ์Šค๋ƒ…์ƒท์„ ๋‹ค์‹œ ๋งŒ๋“ค์—ˆ๊ธฐ์— ์—…๋ฐ์ดํŠธ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ UI์— ๋‹ด๊ฒจ์žˆ์–ด์•ผ ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ๊ฐ€? ๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. 5. ์™œ ๊ตณ์ด ๋ฆฌ๋กœ๋“œ๋ฅผ ํ•ด์ค˜์•ผ๋งŒ UI์—์„œ ์—…๋ฐ์ดํŠธ๊ฐ€ ๋˜๋Š”๊ฑด์ง€ ์ด์œ ๋ฅผ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.. - dataSource์˜ snapShot์— ๋“ค์–ด๊ฐ€์žˆ๋Š” hash id์™€ applyํ•ด์ฃผ๋ ค๋Š” snapShot ์•„์ดํ…œ๋“ค์˜ id๊ฐ€ ๊ฐ™์•„์„œ ๋ณ€ํ™”๋ฅผ ์ธ์ง€ํ•˜์ง€ ๋ชปํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•ด์„œ DiaryData์˜ uuid๋ฅผ ์ƒˆ๋กœ updateํ•ด์ฃผ๋Š” ๋ฐฉ์‹๋„ ์‹œ๋„๋ฅผ ํ•ด๋ดค์ง€๋งŒ ๋ฌธ์ œ ํ•ด๊ฒฐ์—๋Š” ์‹คํŒจํ–ˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ณต์‹๋ฌธ์„œ์™€ ์—ฌ๋Ÿฌ ํฌ๋Ÿผ๋“ค์—์„œ๋„ ์ด ๋ฌธ์ œ๋ฅผ ์–ธ๊ธ‰ํ•˜๋Š”๋ฐ ๋„๋Œ€์ฒด ๋ฌด์—‡์ด ๋ฌธ์ œ์ผ๊นŒ์š”... ### ๐Ÿ“Ž ๊ฐ์ฒด์ง€ํ–ฅ ์ƒํ™œ ์ฒด์กฐ ์›์น™. ํ•œ ์ค„์— ์  ํ•˜๋‚˜. - ํ•œ ์ค„์— ์ ์„ ํ•˜๋‚˜๋งŒ ์จ์•ผํ•œ๋‹ค๋Š” ์›์น™์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์€ ์ƒํ™ฉ์—์„œ laedingAnchor๋ฅผ ์„ค์ •ํ•ด์ค€๋‹ค๊ณ  ํ–ˆ์„ ๋–„ ์ด ์ƒ์ˆ˜3๊ฐœ๊ฐ€ ์ถ”๊ฐ€์ ์œผ๋กœ ์ƒ์„ฑ๋˜์–ด์•ผํ•˜๋Š”๋ฐ ๊ผญ ์  ํ•˜๋‚˜๋งŒ ์‚ฌ์šฉํ•ด์•ผํ•˜๋Š”๊ฑด๊ฐ€์š”..? ![](https://i.imgur.com/zJndruD.png)