User Defaults vs Core Data 좋은 자료를 찾아서 해석해봤습니다 데이터를 저장한다는 것을 제외하고는 persistence solution 이 전혀 다른 User Defautls 와 Core Data! 🤨 User Defaults 는 언제 사용하나요? 설정이나 사용자의 기본 설정과 같은 데이터의 small data chunks 를 저장하는 데 이상적이다. property list 또는 plist 로 디스크에 저장된다. property list 와 plist 는 XML 파일 형태이다. UserDefaults 클래스는 성능 향상을 위해서 런타임에 메모리에 내용을 저장한다. key-value 저장소일뿐이다. 이렇게하면 쉽게 액세스할 수 있지만 key-value pairs 가 서로 명시적 관계가..
Date 로 날짜 다루기 Date() 를 저장해서 사용 .dateComponents 사용해봤다 하지만 역시 불편하다 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { guard let cell = tableView.dequeueReusableCell(withIdentifier: "StoryTVC") as? StoryTVC else { return UITableViewCell() } let month = Calendar.current.dateComponents([.month], from: storyList[indexPath.row].date ?? Date()).month let day..
Moya BandAPI import Foundation import Moya class BandAPI { static let shared = BandAPI() static let provider = MoyaProvider() func getBands(completion: @escaping ([Band]) -> ()) { BandAPI.provider.request(.bands) { response in switch response { case .success(let result): do { let results = try JSONDecoder().decode(BandlistDataModel.self, from: result.data) completion(results.band) print(results...
Core Data CRUD NSManagedObjectContext 여러가지 transaction 메소드를 살펴보자 manager class AppDelegate.swift 에서 persistentContainer 를 계속 가져왔지만 매니저 클래스를 만들어서 사용하자 import Foundation import CoreData class PersistenceManager { static var shared: PersistenceManager = PersistenceManager() lazy var persistentContainer: NSPersistentContainer = { let container = NSPersistentContainer(name: "Model") container.loadPer..
+ 내용을 추가해서 아래의 포스팅을 다시 했습니다! https://gyuios.tistory.com/147 interactivePopGestureRecognizer navigationBar 를 숨기지 않은 상태라면 좌측에서 우측으로 스와이프하면 push 된 뷰컨이 pop 된다. 하지만 다음과 같이 숨김 상태라면 navigationController?.navigationBar.isHidden = true 스와이프해도 pop 되지 않는다. 이때 interactivePopGestureRecognizer 를 사용하면 pop 할 수 있다, override func viewDidLoad() { super.viewDidLoad() self.delegate = self self.dataSource = self if l..
scrollViewDidScroll(_:) 레이아웃 잡기 tableView.contentInset.top 과 같이 inset 을 주는 방법도 있다. let table = UITableView(frame: .zero, style: .grouped) table.contentInset = UIEdgeInsets(top: 200, left: 0, bottom: 0, right: 0) table.contentOffset.y = -200 나는 다른 방법을 생각해봤고 UITableView header 의 크기를 custom UIView 만큼 설정해줘서 tableview 위에 custom UIView 를 얹었다. // MARK: - UITableViewDelegate extension ViewController: UI..
selectedBackgroundView 와 selectionStyle 을 활용해서 cell 이 선택되었을때 불필요하게 변하는 회색 배경을 없앨 수 있다. func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { guard let cell = tableView.dequeueReusableCell(withIdentifier: "StoryTVC") as? StoryTVC else { return UITableViewCell() } // 방법 1 // let backgroundCell = UIView() // backgroundCell.backgroundColor = .white // cell...
- MVVM
- Protocol
- MOYA
- watchOS
- 서버통신
- urlsession
- projectsetting
- 2022 KAKAO TECH INTERNSHIP
- async/await
- UserDefaults
- containerBackground
- Objective-C
- IOS
- configurable widget
- github
- WWDC
- CloneCoding
- SwiftUI
- Notification
- WidgetKit
- Algorithm
- Swift
- WWDC22
- RxCocoa
- Firebase
- OpenSourceLibrary
- rxswift
- Widget
- YPImagePicker
- APNS
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Total
- Today
- Yesterday