iOS firebase CRUD 기초 및 유의사항
파이어베이스를 공부하고 CRUD를 활용해서 작업해보자
RealtimeDatabase랑 FireStore가 존재하는데, 서비스 형태에 따라서 적절하게 적용
//
// ViewController.swift
// FirebaseDemoApp
//
// Created by Hamlit Jason on 2021/04/30.
//
import UIKit
import Firebase
class ViewController: UIViewController {
var ref: DatabaseReference!
@IBOutlet weak var label: UILabel!
var todos = [String]()
var todos2 = [String:String]()
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func didTapWriteButton(_ sender: Any) {
let alertController = UIAlertController(
title: "추가",
message: nil,
preferredStyle: .alert
)
alertController.addTextField()
let okAction = UIAlertAction(title: "ok", style: .default) { (action : UIAlertAction) in
if let newTodo = alertController.textFields?[0].text {
// 1. 나의 데이터베이스 주소
self.ref = Database.database().reference()
self.todos.append(newTodo)
self.todos2 = ["lgvv": newTodo]
let itemRef = self.ref.child("list")
itemRef.setValue(self.todos)
self.ref.child("users/lgvv/username").setValue(self.todos2)
}
}
alertController.addAction(okAction)
present(alertController, animated: true)
}
@IBAction func didTapReadButton(_ sender: Any) {
self.ref = Database.database().reference()
ref.child("users/lgvv/username").observeSingleEvent(of: .value) { (DataSnapshot) in
let value = DataSnapshot.value as? NSDictionary
let username = value?["lgvv"] as? NSString ?? ""
}
let userRef = ref.child("users")
userRef.observe(DataEventType.value, with: { (snapshot) in
// 옵저빙 된 스냅샷 데이터
let postDict = snapshot.value as? [String : AnyObject] ?? [:]
})
}
@IBAction func didTapUpdateButton(_ sender: Any) {
self.ref = Database.database().reference()
guard let key = ref.child("list").childByAutoId().key else { return }
let alertController = UIAlertController(title: "추가", message: nil, preferredStyle: .alert)
alertController.addTextField()
let okAction = UIAlertAction(title: "ok", style: .default) { (action : UIAlertAction) in
if let newTodo = dialog.textFields?[0].text {
// 내 데이터베이스의 주소를 넣어준다.
self.ref = Database.database().reference()
self.todos.append(newTodo)
self.todos2 = ["lgvv":newTodo]
let childUpdates = ["/list/": self.todos]
let childUpdates2 = ["/users/": self.todos2]
self.ref.updateChildValues(childUpdates)
self.ref.updateChildValues(childUpdates2)
}
}
alertController.addAction(okAction)
present(alertController, animated: true)
}
@IBAction func didTapDeleteButton(_ sender: Any) {
self.ref = Database.database().reference()
let alertController = UIAlertController(title: "삭제", message: nil, preferredStyle: .alert)
alertController.addTextField()
let okAction = UIAlertAction(title: "ok", style: .default) { (action : UIAlertAction) in
if let newTodo = dialog.textFields?[0].text {
// 내 데이터베이스의 주소를 넣어준다.
self.ref = Database.database().reference()
self.todos.append(newTodo)
self.todos2 = ["lgvv":newTodo]
self.ref.child("users").removeValue { (_: Error?, DatabaseReference) in
// 삭제 처리에 대한 값이 떨어지는 클로저
}
}
}
alertController.addAction(okAction)
present(alertController, animated: true)
}
}
유의점
- GoogleService-Info.plist 파일 이름이 정확히 일치해야 함
- 프로젝트 안에 넣을 때 Ref를 참조하는게 아니라 Copy해야 Xcode안에서 해당 파일에 세팅된 옵션을 파이어베이스 프레임워크가 읽어서 처리함
'Archive > 잡동사니' 카테고리의 다른 글
[REST API] Alarmofire error 해결! (0) | 2021.09.25 |
---|---|
[REST API] 🏃♀️ 연습시작. (0) | 2021.09.24 |
[git] git loading remotes... 에러 해결 (0) | 2021.04.23 |
xcworkspace에 xcodeproj 로드가 안될 때 (0) | 2021.04.23 |
사용자의 디바이스 시간 불법 변경 막는 법 (0) | 2021.04.23 |