
Realm을 사용하다보면 컬럼을 추가하거나 삭제하는 등의 과정이 필요한 경우가 있음. 모델 클래스 안에서 프로퍼티를 추가, 삭제하거나 이름을 변경하고 빌드를 하면 오류가 남 변화로 인해 스키마의 버전이 바뀌었기때문임 그래서 테이블에 변화가 생기는 경우엔 마이그레이션이 필요함. Migration 현재의 운영 환경으로 부터 다른 운영 환경으로 옮기는 작업을 일반적으로 마이그레이션이라고 하며, 데이터베이스에서만 사용되는 개념이 아님. 데이터베이스에서는 스키마 버전을 관리하기 위해 마이그레이션을 사용. 마이그레이션을 통해 데이터 구조를 맘대로 바꿀 수 있음. 두 컬럼의 값을 합쳐서 새로운 컬럼 안에 값으로 넣어줄 수도 있고, 컬럼 추가, 컬럼 삭제, 타입 변경 등 전부 가능함. 근데 마이그레이션은 꼭 필요한 경..

특정 푸시를 눌렀을 때 특정 화면으로 전환 따로 로직을 설정하지 않으면 단순히 앱이 켜지는 동작만 함. 하지만 코드를 작성해준다면 특정 화면으로 전환시킬 수 있음. 전환시키기 위해서는 우선 현재 사용자가 머물고 있는 최상단 뷰컨트롤러를 알아야함. extension UIViewController { var topViewController: UIViewController? { return self.topViewController(currentViewController: self) } func topViewController(currentViewController: UIViewController) -> UIViewController { if let tabBarController = currentViewCont..

국제화/현지화 사용자가 선택한 기기의 언어대로 나옴. 하지만 기기의 언어와 상관없이 앱에서 사용할 언어를 정할 수도 있음. 다국어를 지원하는 경우, 언어뿐만 아니라 날짜 포맷이나 표시 단위 같은 것들을 신경써야함. i18n(Internationalization) -> 특정 국가나 지역에 종속되지 않게 설계. 언어뿐아니라 RTL이나 날짜 표기 방법 등을 고려해 설계 ex) 국가에 따라 시간대나 날짜가 달라지는데, 이런 변화를 감지하고 처리하는 것 l10n(Localization) -> 번역 및 리소스 작업 등을 적합하게 구현해서 설계. ex) 각 나라별로 날짜 표기 방법이 다르므로 이를 그나라에 맞는 형식으로 표현하는 것. 1. 인터페이스 빌더 기반 우선, 프로젝트 설정의 info에서 Localizatio..

오늘은 평가 과제를 진행하면서 새롭게 알게된 것들을 적어보겠음. @available(*, unavailable) BaseView와 같이 커스텀 베이스 클래스를 사용하여 코드로 구현할 때, required init이 필수로 작성되어야 함. 하지만 쓰지 않는 코드이므로 매번 상속받은 클래스에서 작성할 이유가 없음. 그럴때에 @available(*, unavailable)을 이용하면 됨. *는 모든 버전을 의미하고, unavailable은 막는 의미이므로 모든 경우에서 required init이 작성될 필요가 없어짐. 코드베이스로 구현할 때, 스토리보드 삭제 코드로 구현하면서 항상 남아있는 스토리보드가 거슬렸음. 근데 이 스토리보드만 지우면 오류가 발생함. 두 가지를 추가적으로 삭제해줘야함. 1. TARGET..

Concurrency Programming을 하기 위해서 몇 가지의 방법이 있음. 1. GCD 2. OperationQueue -> GCD로 작업을 일시중단하거나 재개하는데에서 한계가 있었기에 생김 3. Async/Await 오늘은 GCD에 대해서 알아보았음. -> 나중에 따로 정리를 해야됨 GCD(Grand Central Dispatch) DispatchQueue에는 네 가지의 케이스가 있음. (디스패치는 보내는 것을 의미하므로 큐에 보내는 방식이라고 생각하면 될듯) 1. Serial / Sync Serial은 메인 스레드를 의미함. 위의 코드를 설명하자면 메인스레드가 101...200까지 프린트하는 작업을 메인스레드에 넘기는 것임. 근데 메인스레드는 넘긴 작업이 끝날때까지 기다려야함. -> sync이..
- Total
- Today
- Yesterday