(iOS) ํ๋ฉด ์ ํ ๊ณผ์ ์์์ ๋ฐ์ดํฐ ์ ๋ฌ , ViewController ๊ฐ์ ๋ฐ์ดํฐ ์ ๋ฌ
- -
๋ชฉ์ฐจ
ํ๋ฉด ์ ํ ๊ณผ์ ์์์ ๋ฐ์ดํฐ ์ ๋ฌ ๋ฐฉ์
ํ๋ฉด์ด ์ ํ๋๋๋ผ๋ ๊ณ์ํด์ ํ์ํ ๋ฐ์ดํฐ๊ฐ ์์ ์ ์๋ค. ๊ทธ๋ฌํ ๊ฒฝ์ฐ์ ํ๋ฉด๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ ๋ฐฉ์์๋ ํฌ๊ฒ ๋๊ฐ์ง๊ฐ ์๋ค.
- VIewController์ ๊ฐ์ ์ง์ ์ ๋ฌํ๋ ๋ฐฉ์ (๋๊ธฐ ๋ฐฉ์)
์ง์์ ์ผ๋ก ๊ฐ์ ์ ์ฅํ ํ์๊ฐ ์๋ ๊ฒฝ์ฐ์ ์ฌ์ฉ๋๋ ๋ฐฉ์์ด๋ค. ์ฆ, ์ผํ์ฑ์ผ๋ก ์ฌ์ฉ๋ ๊ฒฝ์ฐ์ ์ฌ์ฉ๋๋ ๋ฐฉ์์ด๋ฉฐ, ์ ์ฅ์๋ฅผ ์ด์ฉํ์ฌ ๊ฐ์ ์ ๋ฌํ ๋ ๋ณด๋ค ์ฝ๋๊ฐ ๊ฐ๊ฒฐํด์ง๋ค.
- ๊ณตํต์ ์ ์ฅ์๋ฅผ ๋๊ณ , ๊ฐ์ ๊ณต์ ํ๋ ๋ฐฉ์ (๋น๋๊ธฐ ๋ฐฉ์)
์ง์์ ์ผ๋ก ๊ฐ์ ์ ์ฅํ ํ์๊ฐ ์์๋ ์ฌ์ฉ๋๋ ๋ฐฉ์์ด๋ค. ์ ์ฅ์๋ UserDefault ,DB, CoreData๋ฅผ ์ด์ฉํ๋ค. ํ๋ฉด ์ ํ๊ณผ ๋ฐ์ดํฐ์ ์ ๋ฌ์ด ๋ฐ๋ก ์ด๋ฃจ์ด์ง๊ธฐ ๋๋ฌธ์ ๋น๋๊ธฐ ๋ฐฉ์์ด๋ผ๊ณ ๋งํ๋ค.
1. ViewController์ ์ง์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ ๋ฐฉ์ (๋๊ธฐ ๋ฐฉ์)
* ๋์์์
- BeforeVC์์ AfterVC๋ก ์ ๋ฌํ ๊ฐ์ ์ค๋นํ๋ค.
- ex) ํ ์คํธ ํ๋๋ก ์ ๋ ฅ๋ฐ๊ธฐ, DatePicker๋ก Date๊ฐ ๋ฐ๊ธฐ...
- AfterVC์์ ๊ฐ์ ๋์
๋ฐ์ ํ๋กํผํฐ๋ฅผ ์ ์ํ๋ค.
- ๋ฐ์์ฌ ๊ฐ์ ํ์
๊ณผ ๊ฐ์ ํ๋กํผํฐ ์ ์ํ๊ธฐ, ๊ฐ์ด ๋ง๊ณ ํ์
์ด ๋ค์ํ ๋๋
NSMutableDictionary
๋ฅผ ํตํ๋ฉด ํธ๋ฆฌํ๋ค.
- ๋ฐ์์ฌ ๊ฐ์ ํ์
๊ณผ ๊ฐ์ ํ๋กํผํฐ ์ ์ํ๊ธฐ, ๊ฐ์ด ๋ง๊ณ ํ์
์ด ๋ค์ํ ๋๋
- BeforeVC์์ AfterVC์ ์ธ์คํด์ค๋ฅผ ์ง์ ์์ฑํ๊ฑฐ๋ ์ด๋ฏธ ์์ฑ๋ ์ธ์คํด์ค์ ์ฐธ์กฐ๋ฅผ ์ฝ์ด์จ๋ค.
- ํ๋ ์ ํ
์ด์
๋ฐฉ์์ผ ๊ฒฝ์ฐ์๋
self.storyboard?.instantiateViewController(withIdentifier:์คํ ๋ฆฌ๋ณด๋ID>)
๋ฉ์๋ ์ฌ์ฉ. - ์ธ๊ทธ์จ์ด ๋ฐฉ์์ผ ๊ฒฝ์ฐ์๋ ์๋์ผ๋ก ๋ชฉ์ ์ง์ ์ธ์คํด์ค๊ฐ ์์ฑ๋๋ฏ๋ก
.destination
์์ฑ๋ง ์ฌ์ฉํด์ฃผ๋ฉด ๋๋ค.
- ํ๋ ์ ํ
์ด์
๋ฐฉ์์ผ ๊ฒฝ์ฐ์๋
- BeforeVC์์๋ AfterVC์ ํ๋กํผํฐ์ ๊ฐ์ ๋์ ํ๋ค.
- ํ๋ฉด์ ํํ๋ค.
1-(1) : ํ๋ ์ ํ ์ด์ ๋ฐฉ์์์ ๋ค์ ํ๋ฉด์ผ๋ก ๋ฐ์ดํฐ ์ ๋ฌ ๋ฐฉ์
BeforeVC (์ด๋ก์) , AfterVC(๋ณด๋ผ์)์ ๊ตฌ์ฑํด์ฃผ๊ณ , ์์์ ๋งํ 1~5๋ฒ์ ํด์ฃผ๋ฉด ๋๋ค.
class BeforeVC: UIViewController {
@IBOutlet weak var textField: UITextField!
@IBAction func submit(_ sender: Any) {
guard let AfterVCInstance = self.storyboard?.instantiateViewController(withIdentifier: "AfterVC") as? AfterVC else{ return }
AfterVCInstance.labelText = textField.text!
present(AfterVCInstance, animated: true)
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
}
๋ค์ํ๋ฉด์ ๋ํ ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ฉด UIViewController ํด๋์ค์ด๋ค. ๋ฐ๋ผ์ ์์ฑํ ์ธ์คํด์ค๋ฅผ as
ํค์๋๋ฅผ ํตํ์ฌ AfterVC๋ก ๋ค์ด์บ์คํ
์ ํด์ค์ผ AfterVC์ ํ๋กํผํฐ์ ๊ฐ์ ๋์
ํ ์ ์๋ค.
class AfterVC: UIViewController {
var labelText : String = ""
@IBOutlet weak var label: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
label.text = labelText
// Do any additional setup after loading the view.
}
}
1-(2) : ๋ค๋น๊ฒ์ด์ ์ปจํธ๋กค๋ฌ์์์ ๋ค์ ํ๋ฉด์ผ๋ก ๋ฐ์ดํฐ ์ ๋ฌ ๋ฐฉ์
๊ธฐ๋ณธ์ ์ผ๋ก 1-(1) ํ๋ ์ ํ
์ด์
๋ฐฉ์๊ณผ ๊ฑฐ์ ์ ์ฌํ๋ค. ํ์ง๋ง ๋ค๋น๊ฒ์ด์
์ปจํธ๋กค๋ฌ์์์ ํ๋ฉด์ด๋์ pushViewController
, popViewController
๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์ด ๋ถ๋ถ์ ๋ํ ์์ ์ด ํ์ํ๋ค.
๊ทธ๋ฆฌ๊ณ ๋ค์ ํ๋ฉด์ผ๋ก ๋์ด๊ฐ๋ ๋ฒํผ ๋ํ ์๋จ ๋ค๋น๊ฒ์ด์ ๋ฐ๋ก ์ด๋์์ผ์ฃผ์ด์ผ ํ๋ค.
1-(3) : ์ธ๊ทธ์จ์ด์์ ๋ค์ ํ๋ฉด์ผ๋ก ๋ฐ์ดํฐ ์ ๋ฌ ๋ฐฉ์
์ธ๊ทธ์จ์ด๋ก ํ๋ฉด์ ํํ๋ ๋ฐฉ์์ 2๊ฐ์ง์ด๋ค. ๋ฉ๋ด์ผ ์ธ๊ทธ์จ์ด(์ฝ๋๋ก ์์ฑํ๋ ๋ฐฉ์) , ๊ทธ๋ฆฌ๊ณ ์ก์
์ธ๊ทธ์จ์ด(Ctrl + ๋๋๊ทธ ์ฐ๊ฒฐ). ๋๊ฐ์ง ๊ฒฝ์ฐ์ ์ธ๊ทธ์จ์ด์์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ ๋์ ๋ฐฉ์์ ์ผ์นํ๋ค. ๋ฉ๋ด์ผ ์ธ๊ทธ์จ์ด๋ self.performSegue(withIdenfier:<์คํ ๋ฆฌ๋ณด๋ID>, sender:self)
๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ค. ํ์ง๋ง ๊ฐ์ ์ ๋ฌํ๋ ์ฝ๋๋ฅผ ๋ฃ์ ๋ถ๋ถ์ ์ ์ฒ๋ฆฌ ๋ฉ์๋์ธ prepare
ํจ์ ๋ด๋ถ์ ๋ฃ์ด์ฃผ๋ฉด ๋๋ค.
*๋ค๋ง NavigationController๋ฅผ imbedํ Segue๋ prepare
์ด ๋์ง ์๋๋ค. *
๋ค์ ํ๋ฉด์ ViewController์ ๋ํ ์ธ์คํด์ค๋ ์๋์ผ๋ก ์์ฑ๋๋ค. segue
์ ์์ฑ์ธ destination
๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
๋ฌผ๋ก ๋ค์ํ๋ฉด์ธ afterVC ํด๋์ค ๋ด๋ถ์๋ ๊ฐ์ ๋ฐ์์ฌ ํ๋กํผํฐ๊ฐ ์ ์๋์ด์์ด์ผ ํ๋ค. (์๋ ์ฝ๋์์๋ pramText
๊ฐ afterVC Class
๋ด๋ถ์ ์ ์๋์ด์์ด์ผํ๋ค.)
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let destVC = segue.destination
guard let afterVC = destVC as? AfterVC else { return }
dest.pramText = "์ ๋ฌํ ๊ฐ"
}
2. ์ด์ ํ๋ฉด์ผ๋ก ๊ฐ์ ์ ๋ฌํ๊ธฐ
2-(1) : ์ง์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ ๋ฐฉ์
์ ๋ด์ฉ์ BeforeVC์์ AfterVC๋ก์ ๊ฐ ์ ๋ฌ๋ฐฉ์์ด์๋ค. ํ์ง๋ง AfterVC์์ BeforeVC๋ก ๊ฐ์ ์ ๋ฌํ๋๊ฒ์ ์ฝ๊ฐ ๋ค๋ฅด๋ค.
- ํ๋ฉด ๋ณต๊ท ๋ฉ์๋๋ฅผ ์ฌ์ฉํด์ผํ๋ค. ํ๋ ์ ํ
์ด์
์ธ ๊ฒฝ์ฐ
dismiss
, ๋ค๋น๊ฒ์ด์ ์ปจํธ๋กค๋ฌ๋ผ๋ฉดpopViewController
๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ค. - ์ด์ ํ๋ฉด์ ์ธ์คํด์ค๋ ์ด๋ฏธ ์กด์ฌํ๋ค. (๊ทธ๋์ผ ๋ค์ํ๋ฉด์ผ๋ก ๋์ด ์ฌ ์์์ผ๋) ํ๋ ์ ํ
์ด์
๋ฐฉ์์ด๋ผ๋ฉด
self.presentingViewController
๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค. ๋ค๋น๊ฒ์ด์ ์ปจํธ๋กค๋ฌ๋ผ๋ฉดself.navigationController?.viewControllers
๋ฐฐ์ด์ ์ฌ์ฉํ๋ฉด๋๋ค. - ์ด์ ํ๋ฉด์ ์ด๋ฏธ ํ๋ฒ ์์ฑ๋ ์ธ์คํด์ค์ด๋ค. ๋ฐ๋ผ์ ๊ฐ์ ์
๋ฐ์ดํธ ํ๋ ์ฝ๋๋ฅผ
viewDidLoad()
๋ฉ์๋์ ๋ฃ์ผ๋ฉด ์๋๋ค. ๋์ ํ๋ฉด์ด ๊ทธ๋ ค์ง๋๋ง๋ค ๋งค๋ฒ ์คํ๋๋ViewWIllAppear(_:)
๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด๋๋ค.
* <์ด์ ํ๋ฉด : Navigation Controller / ๋ค์ํ๋ฉด : present๋ก ๋์ด ํ๋ฉด> ์ ๊ฒฝ์ฐ์์ ์ด์ ํ๋ฉด์ผ๋ก ๊ฐ ์ ๋ฌํ๋ ค๋ฉด
self.presentingViewController ์ผ๋ก ์ ๊ทผํ๊ฒ๋๋ฉด UINavigationController์ด๋ค. ๋ฐ๋ผ์
self.presentingViewController ๋ฅผ UINavigationController๋ก ์บ์คํ , ๊ทธ๋ฆฌ๊ณ ๋ค์ํ๋ฒ .viewControllers[0] ๋ฅผ ํตํด ์ ๊ทผํ๋ฉด ๋๋ค.
2-(2) : ์ ์ฅ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ ๋ฐฉ์
AppDelegate ์ด์ฉํ๊ธฐ
- ์ฑ์ ์๋ช ์ฃผ๊ธฐ๋ฅผ ์์๋ฐ์ ์ฒ๋ฆฌํ๋ AppDelegate๋ ํ๋ก์ ํธ ๋ด๋ถ์ ํ๋๋ง ์กด์ฌํ๋ฉฐ, ์ฌ๋ฌ ๋ทฐ ์ปจํธ๋กค๋ฌ์์ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค.
- ๋ค๋ง ์ฑ์ ์์๊ณผ ์ข ๋ฃ๊น์ง๋ง ๋ฐ์ดํฐ๊ฐ ์ ํจํ๋ค. (๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋๋ฏ๋ก)
- AppDelegate๋ iOS์์คํ
์์ ํ๋์ ์ธ์คํด์ค๋ง ์กด์ฌํ๋๋ก ๋ณด์ฅ๋๋ค(์ฑ๊ธํค) . ๋ฐ๋ผ์ ์ง์ ์ธ์คํด์ค๋ฅผ ์์ฑํ ์ ์๊ณ ,
UIApplication.shared.delegate
๋ฅผ ํตํด ํ์ฌ ์์ฑ๋ ์ธ์คํด์ค๋ฅผ ์ฐธ์กฐํ ์ ์๋ค. ๊ทธ๋ฆฌ๊ณAppDelegate
๋ก ๋ค์ด์บ์คํ ์ ํด์ค์ผ ์ง์ ์ ์ํ ํ๋กํผํฐ์ ์ฐธ์กฐ๊ฐ ๊ฐ๋ฅํ๋ค.
- AppDelegate ํ์ผ์ ์ํ๋ ํ๋กํผํฐ๋ฅผ ์ ์ํ๋ค.
- ์ค์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ ViewController์์ ์ธ์คํด์ค๋ฅผ ์์ฑํ๊ณ ์ฌ์ฉํ๋ฉด ๋๋ค.
let ad = UIApplication.shared.delegate as? AppDelegate
UserDefault ์ด์ฉํ๊ธฐ
- ๋ฐ์๊ตฌ์ ์ด๋ค. (์ฑ์ ์ญ์ ํ๊ธฐ ์ ๊น์ง ์ ์ง๋๋ค)
- ์ฃผ๋ก ๊ฐ๋จํ ์ค์ ์ ๋ณด๋ฑ์ ์ ์ฅํ๋๋ฐ ์ฌ์ฉ๋๋ค.
- appDelegate์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋จ์ผ๊ฐ์ฒด์ด๋ค.
- ํด๋์ค ํ๋กํผํฐ์ด๋ฏ๋ก ์ธ์คํด์ค๋ฅผ ์์ฑํ์ง ์๊ณ ์ฌ์ฉ๊ฐ๋ฅํ๋ค.
- ๋ด๋ถ์ ์ผ๋ก plist์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ตฌ์กฐ์ด๋ค. ๋ฐ๋ผ์ ๋ณด์์ ๊ฐ๋ ฅํ์ง ์๋ค.
let ud = UserDefaults.standard // UserDefault ๊ฐ์ฒด ์ธ์คํด์ค๋ฅผ ๊ฐ์ ธ์จ๋ค.
ud.set("kim", forKey: "name") // "name"์ด๋ผ๋ key๋ก "kim"์ ์ ์ฅํ๋ค.
let name = ud.value(forKey: "name") as? String // "name"key๋ฅผ ํตํด ๊ฐ์ ์ ๊ทผํ๋ค.
ud.string(forKey:) // string๋ง ์ต์
๋๋ก ๋ฐํ๋๋ค.
ud.bool(forKey:)
ud.double(forKey:)
ud.object(forKey:) // anyํ์
์ ๋ฐํํ๋ค.
ud.value(forKey:) // anyํ์
์ ๋ฐํํ๋ค.
.
.
.
๋ก ๊ฐ์ ์ํ๋ ํ์
์ผ๋ก ๊ฐ์ ธ์ฌ ์ ๋ ์๋ค.
'๐ฑ iOS > -- UIKit' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋น์ ์ด ์ข์ํ ๋งํ ์ฝํ ์ธ
-
(iOS) ๋ธ๋ฆฌ๊ฒ์ดํธ ํจํด์ ํตํด ์ด์ ํ๋ฉด์ ๊ฐ ์ ๋ฌํ๊ธฐ (Delegate , Protocol) 2021.07.31
-
(iOS) ์๋ฆผ์ฐฝ, ์ก์ ์ํธ , ๋ก์ปฌ ํธ์์๋ (UIAlertController , UserNotification) 2021.07.29
-
(iOS) ์ฝ์ฝ์ ํฐ์น , iOS์ ๊ณ์ธต๊ตฌ์กฐ (CocoaTouch) 2021.07.19
-
(iOS) iOS์ฑ์ ๊ตฌ์กฐ์ ์ฑ์ ์คํ๊ณผ์ , ์ด๊ธฐํ ๊ณผ์ 2021.07.18
์์คํ ๊ณต๊ฐ ๊ฐ์ฌํฉ๋๋ค