๐ฉ๐ป๋ฐฐ๊ฒฝ๐ฉ๐ป
CollectionView๋ฅผ ์ฌ์ฉํ๋ฉด cell ์ญ์ , ์ถ๊ฐ, ๋ณ๊ฒฝ ๋ฑ ๋ค์ํ ์ด์ ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ๋ฐ์ดํธํด์ผ ํ๋ค. ๊ทธ๋ reloadData, reloadSection, deletedItem, insertItem ๋ฑ ๋ฐ์ดํฐ ๋ณ๊ฒฝ ๊ด๋ จํ์ฌ CollectionView์ ๋ ์ด์์์ ์ ๋ฐ์ดํธํด์ฃผ๋ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ค.
์ ํจํ์ง ์์ ์ ๋ฐ์ดํธ
[UICollectionView] Performing reloadData as a fallback — Invalid update: invalid number of items in section 0. ...
deleteItem ๋ฉ์๋๋ฅผ ์ฌ์ฉํด CollectionView๋ฅผ ์ ๋ฐ์ดํธํ๋ ค ํ๋๋ฐ ์์ ๊ฐ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ณ collectionView์ ์ด๋ ํ ๋ณํ๋ ์์๋ค. ๊ทธ๋์ ์ค๋ฅ ๋ฉ์ธ์ง๋ฅผ ์ ์ฝ์ด๋ดค๋ค.
- ํด๋ฐฑ์ผ๋ก reloadData ์ํ - ์ ํจํ์ง ์์ ์ ๋ฐ์ดํธ: ์น์ 0์ ์ ํจํ์ง ์์ ์์ดํ ์ ๊ฐ์
- ์ ๋ฐ์ดํธ ํ ๊ธฐ์กด ์น์ ์ ์์ดํ ์๋ ์ ๋ฐ์ดํธ ์ ํด๋น ์น์ ์ ์์ดํ ์์ ๊ฐ์์ผํ๋ค. ๐
์ ๋ฐ์ดํธ ์ ํ๋ก ์น์ ์ ์์ดํ ์๊ฐ ๊ฐ์์ผ ํ๋ค๋๋ฐ ์ด ๋ถ๋ถ์ ๋ํด์๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ํ์๋ ์ ์ดํด๊ฐ ์ ๊ฐ๋ค. ์ด์จ๋ ์ค๋ฅ๋ฉ์ธ์ง๋ ์น์ ์ ์์ดํ ์์ ๋ฌธ์ ๊ฐ ์์ผ๋ฉฐ ๋์ reloadData๋ฅผ ์ํํด ๋ค์ CollectionView๋ฅผ ๊ตฌ์ฑํ๋ค๊ณ ํ๋ค.
๋ฐ์ดํฐ๋ฅผ UserDefaults์ ๋ฃ์ด ๊ด๋ฆฌํ๊ธฐ ๋๋ฌธ์ ๋น์ฐํ UserDefaults์ ๊ฐ๋ ๋ค ๋ณ๊ฒฝํ ํ ์ ๋ฐ์ดํธ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ค. ๊ทธ๋์ ์์ดํ ์ ๊ฐ์์๋ ๋ฌธ์ ๊ฐ ์๋ค๊ณ ์๊ฐํ๋ค. ํ์ง๋ง ์ฌ๊ธฐ์ ์ค์๊ฐ ์์๋ค.
CollectionView๋ฅผ ์ ๋ฐ์ดํธํ ๋ ํธ์ถ๋๋ ๋ฉ์๋๋ค
CollectionView์ ์์ฑ๋ ๋์๋ ์ฌ๋ฌ ๋ฉ์๋๋ค์ด ํธ์ถ๋๋ค. ๋จผ์ func numberOfSections(in: UICollectionView)์ด ํธ์ถ๋์ด ์น์ ์ ๊ฐ์๋ฅผ ์ค์ ํ๊ณ ๊ทธ ํ ๊ฐ ์น์ ์ ์์ดํ ์๋ฅผ ์๊ธฐ ์ํด func collectionView(UICollectionView, numberOfItemsInSection: Int)๊ฐ ํธ์ถ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ ์์ดํ ์ cell์ ๊ตฌ์ฑํ๋ func collectionView(UICollectionView, cellForItemAt: IndexPath) ๊ฐ ํธ์ถ๋๋ค.
์ ๋ฐ์ดํธํ ๋๋ ์ด์จ๋ collectionView๋ฅผ ๊ตฌ์ฑํ๋ ๊ฒ์ด๋๊น ์์ ๊ฐ์ ๊ณผ์ ์ด ๋์ผํ๊ฒ ๋ฐ์ํ๋ค. (deleteItem์ ๊ฒฝ์ฐ ๊ทธ์ ํน์ ์์ดํ ์ ์ง์ฐ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์์ดํ ์ cell์ด ๋ค์ ์์ฑ๋์ง ์๋๋ค. ์ฆ, cellForItemAt ๋ฉ์๋๊ฐ ํธ์ถ๋์ง ์๋๋ค.) ๋ฐ๋ผ์ ์ ์ธ ๊ฐ์ ๋ฉ์๋๋ฅผ ์ ๋ณด๋ฉด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ ๊ฒ ๊ฐ์๋ค.(๊ตฌ๊ธ๋ง๋ ๋์์ด ๋์๋ค)
์ค์ ๋ฐ๊ฒฌ!
์์ ๋งํ๋ฏ์ด ๋๋ UserDefaults์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์์๋ค. ๋ฐ๋ผ์ UserDefaults์ ๋ฐ์ดํฐ ์ ๋ฐ์ดํธ๋ง ์๊ฐํ๋ค..
ํด๋น ํ๋ฉด์ ๋ง๋ค๋ฉด์ ์น์ ์ 2๊ฐ๋ก ๋๋ CollectionView๋ฅผ ๊ตฌ์ฑํ๊ธฐ ๋๋ฌธ์ ํจ์จ์ ์ด๋ฉฐ ์ง๊ด์ ์ผ๋ก ์ฝ๋๊ฐ ๋ณด์ด๊ธธ ๋ฐ๋ผ UserDefaults์์ ๊บผ๋ด ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ก ๋ฐ์ดํฐ ๋ชจ๋ธ์ ๋ง๋ค์ด Array ๋ณ์๋ฅผ ์์ฑํ์๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ๋ณ์๋ก CollectionView๋ฅผ ๊ตฌ์ฑํ๋ค. ๊ทผ๋ฐ ์ด Array ๋ณ์์ ๊ฐ์ ์ ๋ฐ์ดํธํ์ง ์์์ ์์ดํ ๊ฐ์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ ๊ฒ์ด๋ค๐ซ
ํด๋น Array ๋ณ์์ ๊ฐ๋ ๊ฐ์ด ์ ๋ฐ์ดํธํ๋ ์์ฃผ ์ ์๋ํ๋คใ ใ
๋ง๋ฌด๋ฆฌ
์ฝ๊ฐ ํ๋ฌดํ ๊ฒฐ๋ง์ด๋ผ ์๊ฐ์ด ๋์ง๋ง ์ด๋ ๊ฒ ๋ธ๋ก๊ทธ์ ์ ๋ฆฌํ๋ฉด์ ์ด ์ํ์ฐฉ์ค๋ก ๋ฐฐ์ด ๋ด์ฉ์ด ๋ง๋ค๋ ๊ฑธ ๋๊ผ๋ค. ์ค๋ฅํด๊ฒฐ์ ์ํด ํ ์ ๋ณด๋ง์ ๊ฒ์ํ๊ณ ๊ณต๋ถํ๊ฒ ์๋๊ธฐ ๋๋ฌธ์ ํ๋ก๊ทธ๋๋ฐ์ ๋์์ด ๋ ๋งํ ์ฌ๋ฌ ์์ด๋์ด๋ ์ป๊ณ ์ฌ์ฉํด๋ณด์ง ์์๋ ๋ฉ์๋๋ค๋ ์ ํ ์ ์์๋ค. ์ญ์ ์๋ฏธ์๋ ๊ณต๋ถ๋ ์๋ค.
- deleteItem, insertItem ๋ฑ์ ์ฌ์ฉํ๋ ค๋ค ์ค๋ฅ๊ฐ ๋๋ฉด reloadData๊ฐ ํธ์ถ๋๋ค.
- deleteItem์ ์ฝ๋ ์์์ ์๊ด์์ด insetItem๋ณด๋ค ๋จผ์ ์๋๋๋ค.
- ์ฌ๋ฌ ๊ฐ์ ์์ดํ ๋ณํ๋ฅผ ๋์์ ์ ๋๋ฉ์ด์ ๊ตฌํํ๊ณ ์ ํ ๋ performBatchUpdates(_:completion:) ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ์ข๋ค.
- CollectionView ์ ๋ฐ์ดํธ๋ ์ CollectionView ๊ตฌ์ฑํ๋ ๊ฒ๊ณผ ๋์ผํ ๊ณผ์ ์ ๊ฑฐ์น๋ค.
- ํนํ reloadData๋ ์์ดํ ์ cell๊น์ง ๋ชจ๋ ์๋ก ๋ง๋ค๊ธฐ ๋๋ฌธ์ ๋ง์ฝ ๋ฐ์ดํฐ๊ฐ ๋ง๋ค๋ฉด UI ๊ตฌ์ฑ์ ์ค๋ ์๊ฐ์ด ๊ฑธ๋ฆด ๊ฒ ๊ฐ๋ค. ๋ฐ๋ผ์ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํด์ผํ๋ค.
- item์ delete, insert, move ํ๋ ๊ฒ์ cell์ ์๋ก ๋ง๋ค์ง ์๋๋ค.
- ์๋ฒ์์ ์น์ ๋ณ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ reloadSection๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฐ์ดํฐ ์ ๋ฌ์ ์ค๋ ๊ธฐ๋ค๋ฆฌ์ง ์์๋ ๋๊ณ reloadData๋ฅผ ์ฌ๋ฌ ๋ฒ ํธ์ถํ์ง ์์๋ ๋๋ค.
- CollectionView๋ฅผ ๊ตฌ์ฑํ ๋ ์ฌ์ฉ๋๋ Array๋ฅผ ์ ๋ณด์๐ง๐ปโ๏ธ
- ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ๋ณต์กํ์ง ์๊ฒ ๊ตฌ์ฑํ์.
ํ๋ฉด๊ณผ ๋ฐ์ดํฐ๊ฐ ์ ์ ๋ง์์ง๊ณ ๋ณต์กํด์ง๋ฉด์ ํจ์จ๊ณผ ๊น๋ํ ์ฝ๋์ ๋ํด ์๊ฐํด๋ณด์ง ์์ ์ ์๋ค..
UserDefaults๋ฅผ ์ฌ์ฉํ๊ณ ์์ง๋ง ๋ง์ ์์ ๋ฐ์ดํฐ๋ฅผ UserDefaults์ ์ ์ฅํ๋ ๊ฑด ์ฌ์ค ๊ทธ ํด๋์ค ๋ชฉ์ ์ ๋ง์ง ์๋ค. ๋ฐ๋ผ์ Core Data๋ก ์ฎ๊ธธ ์๊ฐ์ ํ๊ณ ์๋๋ฐ ์ด์ ํจ๊ป ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ ์ ๋ฆฌํด์ผํ ๊ฒ ๊ฐ๋ค.