๋ฌด์ง์ฑ ํ ์ดํ๋ก์ ํธ ์๋ฆฌ์ฆ ์์ ์์...?
- ๋ทฐ์ปจํธ๋กค๋ฌ๋ ์นํด์ง๊ธฐ
- UIImagePickerController๋ฅผ ์ด์ฉํ ์ฌ์ง์ฒจ๋ถ
- CoreData๋ผ๋ Framework๋ฅผ ์ฌ์ฉํ CRUD๊ตฌํ
- TableView, TableViewCell, ์ปค์คํ ์ ์ด๋ ์ด๋ป๊ฒ๋ ์นํด์ง๊ธฐ
๊ทธ์ค ์ค๋์ 3๋ฒ๋ถํฐ!! ๊ณ ๊ณ ๊ณ ใ ๊ณ ๊ณ ๊ณกใฑ
3. CoreData๋ผ๋ FrameWork๋ฅผ ์ด์ฉํ CRUD๊ตฌํ
์ฑ ๋ก์ปฌ DB๋ก ์ธ ์ ์๋๊ฒ๋ค์ด ๋ช๊ฐ์๋ค.
UserDefault, CoreData, SQLite, Realm,,์ ๋?
UserDefault๋ ๋๋์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋๋ฐ์ ์ ํฉํ์ง ์์๊ฒ ๊ฐ๋ค.
๋ก๊ทธ์ธ ๋ฐ์ดํฐ ์ ์ฅ์ด๋,,์ฑ ์ต์ด์คํ ์ฌ๋ถ๋ ๊ทธ๋ฐ๊ฒ๋ค์ ์ ์ฅํ๋๋ฐ์ ์ฐ๋๋ฏ.
๋์ค์ ์จ๋ฒ๊ธฐ๋ฅ์ ๊ตฌํํ ๋ tableView๋ฅผ ์ด์ฉํ ์์ ์ด๋ฏ๋ก, CoreData๊ฐ ์ ํฉํ๋ค๊ณ ํ๋จ.
์ฌ๊ธฐ์์ CoreData๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ ์๊ฐํ๊ณ ์๋ค.
๋จผ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํด์ผ ๋ณผ ๋ฐ์ดํฐ๊ฐ ์๊ธฐ๋ฏ๋ก CRUD์ค์ Create๋ฅผ ๊ตฌํํด ๋ณด์.
Create๊ธฐ๋ฅ ๊ตฌํ
๊ณํ์ ๋ค์๊ณผ ๊ฐ๋ค.
- ImageView์ ์ฌ์ง์ ์ฒจ๋ถํ ๋ ํน์ ์ด๋ฆ์ ์ง์ ํ๋ค.
- FileManager๋ฅผ ์ด์ฉํด์ ImageView์ ์ด๋ฏธ์งํ์ผ์ ๋ก์ปฌ์คํ ๋ฆฌ์ง์ ์ ์ฅํ๋ค.
- Diary์ํฐํฐ์ ์ด๋ฏธ์งํ์ผ์ด๋ฆ๊ณผ ๋๋จธ์ง ์ ๋ณด๋ฅผ ์ ์ฅํ๋ค.
๋์ค์ Read๊ธฐ๋ฅ ๊ตฌํํ ๋ Diary์ํฐํฐ์ imageFileName์ ํด๋นํ๋ ์ด๋ฏธ์งํ์ผ์ ๊ฐ์ด ๋ถ๋ฌ์ค๋ฉด ๋ ๋ฏ!
์ด๋ ๊ฒ ํ๋ ์ด์ ๋ CoreData์ ํน์ฑ์ ์ํฐํฐ๋ฅผ ๋ถ๋ฌ์ฌ๋ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋๋ฅผ ํ๋๋ฐ, ์ด๋ฏธ์งํ์ผ๊ฐ์ด ํฌ๊ธฐ๊ฐ ํฐ ํ์ผ์ ๋ถ๋ฌ์ค๋๊ฑด ์ฉ ์ข์ง ์์๊ฒ ๊ฐ๋ค๋ ํ๋จ์ด ๋ค์๊ธฐ ๋๋ฌธ.
์๊ทธ๋๋ ๋ด ์ฝ๋ ๋๋ฌ์์ ์คํ์๋๊ฐ ๊ฑฑ์ ๋๋๊น....์ด๋ฐ๊ฑฐ ํ๋๋ผ๋,,,ํคํค
๋จผ์ 1,2๋ฒ์ ํด๊ฒฐํด๋ณด์.
์ ๋ฒ ํฌ์คํธ์์ ImageView์ ์ฌ์ง์ ์ฒจ๋ถํ๋ ํจ์์ ์ฝ๋ ๋ช์ ์๋ฅผ ์ฌ๋ฆฌ๋ฉด ๋!
class WriteViewController: .... {
var picName : String? //์ด๋ฏธ์ง ์ด๋ฆ์ ๋ด์ ๋ณ์๋ฅผ ์์ฑํด์ฃผ์.
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
if let picFromInfo = info[UIImagePickerController.InfoKey.originalImage] as? UIImage
{
dismiss(animated: true, completion: nil)
self.picture.image = picFromInfo
self.picName = (ProcessInfo.processInfo.globallyUniqueString)+".jpeg"
//(ProcessInfo.processInfo.globallyUniqueString)๋ ์ ๋ํฌํ ๋ฌธ์์ด์ ๋ง๋ค์ด์ฃผ๋ ์ฝ๋์ด๋ค.
}
}
์ด๋ฌ๋ฉด ์ฌ์ง ์ฒจ๋ถ์ ๋์์ ์ฌ์ง์ ์ ๋ํฌํ ์ด๋ฆ์ด ๊ฒฐ์ ๋๋ค.
๋ค์์ FileManager๋ฅผ ์ด์ฉํด์ ๋ก์ปฌ ์คํ ๋ฆฌ์ง์ ์ด๋ฏธ์ง๋ฅผ ์ ์ฅํด๋ณด์.
์ฌ๊ธฐ์์ ๋ก์ปฌ์คํ ๋ฆฌ์ง์ ์ด๋ฏธ์ง๋ฅผ ์ ์ฅํ๋ ๋ฐฉ๋ฒ์ ์๊ฐํ๊ณ ์๋ค.
์๋ฃ ๋ฒํผ์ ๋๋ฅด๋ฉด, ์ด๋ฏธ์ง๊ฐ ๋ก์ปฌ์คํ ๋ฆฌ์ง์ ์ ์ฅ๋๋๋ก ํ๋ ์ฝ๋์ด๋ค.
ImageFileManager.shared.saveImage(image: self.picture.image!, name: self.picName!){onSuccess in print("saveImage onSuccess: \(onSuccess)")}
์ด์ 3๋ฒ์ด ๋ฌธ์ ์ธ๋ฐ...CoreData๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๊ฐ์ก๋๋ฐ๋ง ์ ๋ง ๋ช์ผ์ด ๊ฑธ๋ ธ๋ค.
๊ทธ๋ฅ DB์ ์ ๊ทผํ๋๊ฒ์ด ์๋๋ผ, ์ฌ๋ฌ๊ฐ์ง ๋
์๋ค์ ๊ฑฐ์ณ DB์ ์ ๊ทผํ๋ค.
์ฌ๊ธฐ์์ ๋๋ฅผ ๊ตฌ์ํด์ค ๋์์๊ฐ์ข๋ฅผ ๋ณผ์ ์๋ค. ์์ง๋ ์๋ฆฌ์กํ์ง๋ง, ๊ตฌ์กฐ๋ฅผ ์ด๋์ ๋ ์์ ์๋ค.(ํ๊ธ๋ง๋ ์ ๋ง ๊ฐ์ฌ๋๋ฆฝ๋๋ค๐๐)
๊ทธ๋ผ ์ด๋ฏธ์ง ์ ์ฅํ ๋์ ๋น์ทํ๊ฒ CoreDataManager ํด๋์ค๋ฅผ ๋ง๋ค์ด์ ์งํํด๋ณด์.
์ด ํด๋์ค์์ appDelegate์์ NSPersistentContainer๋ก ๋ง๋ค์ด์ค persistentContainer๊ฐ์ฒด๋ฅผ ํตํด ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋ ๊ฒ์ด๋ค.
(์์ ๋์์ ๊ฐ์์์ NSPersistentContainer๊ฐ ๋ฌด์จ ์ญํ ์ ํ๋์ง ์์ ์๋ค.)
๋ค๋ฅธ ํด๋์ค์์ ์ด ํด๋์ค๋ฅผ ์ฌ์ฉํ ์ ์์ด์ผ ํ๊ณ , ์ค๋ก์ง CoreDataManger๋ก๋ง ์ํฐํฐ๋ฅผ ๊ฑด๋๋ฆด๊ฒ์ด๊ธฐ ๋๋ฌธ์, CoreDataMangerํด๋์ค๋ ์ฑ๊ธํค์ผ๋ก ๋ง๋ ๋ค.
static let shared: CoreDataManager = CoreDataManager()
persistentContainer๊ฐ์ฒด๊ฐ ๊ฐ๊ณ ์๋ viewContext ํ๋กํผํฐ๋ DB๋ผ๋ ๋์๊ด์ ๊ด๋ฆฌํ๋ ์ฌ์๋ผ๊ณ ์๊ฐํ๋ฉด ํธํ๋ค.
(์ด๋ ๊ฒ ์๊ฐํ๋๊ฒ ๋ง๋ ์ถ์ง๋ง, viewContext๋ ๊ด๋ฆฌ ๊ฐ์ฒด(DB์ ๋ ์ฝ๋..์ ๋?) ๋ฅผ ์์ฑํ๊ณ ์ญ์ ํ๋ ๋ฑ๋ฑ์ ๊ธฐ๋ฅ์ ํ๋ค.
๋ฐ๋ผ์ viewContextํตํด ์ํฐํฐ๋ฅผ ์ ์ฅํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์, viewContextํ๋กํผํฐ๋ฅผ ๋ด๋ ๋ณ์๋ฅผ ์์ฑํ๋ค.
๊ทธ๋ฆฌ๊ณ ์ํฐํฐ์ ์ ๊ทผํ ๋ ์ด๋ค ํ์
์ ์ํฐํฐ์ธ์ง๋ฅผ ๊ตฌ๋ถํ ์ ์์ด์ผ ํ๊ธฐ๋๋ฌธ์ ์ํฐํฐ ์ด๋ฆ์ ๋ด์ ๋ณ์๋ ์์ฑํ๋ค.
let appDelegate: AppDelegate? = UIApplication.shared.delegate as? AppDelegate
lazy var context = appDelegate?.persistentContainer.viewContext
let modelName: String = "Diary"
์, ์ฌ๋ฃ๋ ๋ค ์ค๋น๋์ผ๋ฏ๋ก ์๋ฆฌ๋ฅผ ์์ํด๋ณด์.
๋ฉ์๋๊ฐ ํ๋ ์์ด์ผํ๋๋ฐ, ๊ทธ๋
์์ ์ํฐํฐ์ ์ ์ฅ๋ ์ ๋ณด๋ฅผ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ์ ํ์, Diaryํ์
์ ์ ๊ฐ์ฒด๋ฅผ ์์ฑํด viewContext๋ฅผ ํตํด ์ํฐํฐ์ ๋ด์๊ฒ์ด๋ค.
func saveDiary(p1: String, p2: String,
picID: String, content: String, diaryID: Int32, date: Date, onSuccess: @escaping ((Bool) -> Void)) {
if let context = context,
let entity: NSEntityDescription
= NSEntityDescription.entity(forEntityName: modelName, in: context) {
if let newData: Diary = NSManagedObject(entity: entity, insertInto: context) as? Diary {
newData.placeName1 = p1
newData.placeName2 = p2
newData.imageFileName = picID
newData.content = content
newData.diaryID = diaryID
newData.date = date
contextSave { success in
onSuccess(success)
}
}
}
}
๋ค์์ ์๋ฃ ๋ฒํผ์ ๋๋ฅด๋ฉด, ์ ๋ณด๊ฐ Diary์ํฐํฐ์ ์ ์ฅ๋๋๋ก ํ๋ ์ฝ๋์ด๋ค.
CoreDataManager.shared.saveDiary(p1: self.PlaceNameField.text!, p2: self.PlaceNameField.text!, picID: self.picName!, content: self.diary.text, diaryID: Int32(Int(Date().timeIntervalSince1970)), date: Date()) { onSuccess in print("saveDiary onSuccess: \(onSuccess)")}
๋ฐ๋ผ์ ์๋ฃ ๋ฒํผ์ ๋๋ฅด๋ฉด ์คํ๋๋ ํจ์๋ ๋ค์๊ณผ ๊ฐ๋ค.
@IBAction func pressed(_ sender: Any) {
if((sender.self as! UIButton).currentTitle == "์๋ฃ"){
CoreDataManager.shared.saveDiary(p1: self.PlaceNameField.text!, p2: self.PlaceNameField.text!, picID: self.picName!, content: self.diary.text, diaryID: Int32(Int(Date().timeIntervalSince1970)), date: Date()) { onSuccess in print("saveDiary onSuccess: \(onSuccess)")}
ImageFileManager.shared.saveImage(image: self.picture.image!, name: self.picName!){onSuccess in print("saveImage onSuccess: \(onSuccess)")}
self.presentingViewController?.dismiss(animated: true)
}else{
self.presentingViewController?.dismiss(animated: true)
}
}//์ทจ์๋ฒํผ๋๋ฅด๋ฉด ๋ทฐ ๋ซ๊ณ , ์๋ฃ๋ฒํผ ๋๋ฅด๋ฉด ๋ฐ์ดํฐ ์ ์ฅ ํ ๋ทฐ ๋ซ์
๊ฐ๋จํ๊ฒ ์ ๋ณด๋ฅผ ๋ถ๋ฌ์ค๊ธฐ ์ํด ๋ค์ ๋ณ๋์ ์ฝ๋๋ฅผ ๋ง๋ค์ด ์ ์ ์ฅ๋์๋์ง ํ์ธํ์๋ค.
์ฌ์ค ์ด์ ๋ถํฐ ์ฐ์ด๋ค.
TableView, TableViewCell์ ๋ํ ์ดํด, TableView์ CoreData๋ฅผ ์ฎ๋ ๋ฐฉ๋ฒ(Read๊ธฐ๋ฅ์ ํด๋นํ๊ฒ ๋ค)์ ๊ณต๋ถํด์ผ ํ๋ค.
๊ทธ๊ฑด ๋ ๋ค์ ํฌ์คํ
์!
'learnings > Swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[iOS/Swift] ์ธ์คํด์ค์ ์ํ ์ฐธ์กฐ์ ์ํ ๋ฉ๋ชจ๋ฆฌ ๋์ (0) | 2024.03.21 |
---|---|
[iOS/Swift] TableView์์ SnapScroll (magnetic scroll) ๊ตฌํ (0) | 2023.01.20 |
[iOS/Swift] #1-1 ๋์ ์ฒซ ํ ์ดํ๋ก์ ํธ (0) | 2021.09.21 |
[iOS/Swift] ๋ฉ๋ชจ (0) | 2021.07.01 |
[iOS/Swift] #0 ์ค์ํํธ, ๊ฐ๋ณด์ ๊ฐ๋ณด์~ (0) | 2021.06.26 |