23.08.28 월
·
iOS/🌱 SeSAC
💡 레이아웃 코드 분리하기 BaseViewController BaseViewController를 생성하여 VC에 공통적으로 사용하는 설정 요소들을 작성하고 뷰 컨트롤러들이 상속 받는 형식으로 구성 뷰 객체에 대한 UI나 레이아웃, 토스트 메세지, 얼럿, 임포트 등 뷰컨에서 공통적으로 작성되는 코드를 구조화 함으로써 가독성도 높이고 코드 중복도 줄일 수 있다. ✅ view controller의 레이아웃 코드 분리하기 BaseView를 상속받는 AddView → AddViewController의 루트 뷰로 설정할 것 자기 자신에게 적용하는 것이기 때문에 view는 지워도 된다. AddView 클래스 인스턴스를 생성 mainView를 루트 뷰로 교체를 해줘야 한다. 💡 RootView - loadView() ..
23.08.25 금
·
iOS/🌱 SeSAC
tableview register 등등 클로저 구문에 imageview frame 지정 시점 💡 CustomTableViewCell 구현하기 ✔️ UITableViewCell 생성 → 인터페이스 빌더 상에서 셀을 구현할 때 작동한다. ✔️ view.addSubView / contentView.addSubView view.addSubView → uiViewController의 변경할 수 없는 기본 view 위에 얹는 것 tableViewCell은 Content View위에 다른 뷰들이 올라가는 것이다. ⇒ 때문에 addSubView를 할 때 view가 아닌 contentView 위에 올려야 한다! contentView가 아닌 tableViewCell위에 올리는 것은 오류가 발생하지는 않지만 레이아웃 적용이..
23.08.24 목
·
iOS/🌱 SeSAC
💡 카메라 권한: 촬영, 갤러리, 마이크 ImagePickerControlller → deprecated 예정 ⇒ PHPicker 🔎 갤러리에 접근하기 인스턴스 가져오기 let picker = UIImagePickerController() photoLibrary, savedPhotosAlbum → will be deprecated camera는 아직 사용 가능 available - 갤러리에 접근할 수 있는지 권한 단독으로 사진만 가져오고 싶다 → 권한 안물어봐도 됨 민감한 데이터 혹은 정보 사용 등 경우 권한 물어봐야 함 ⇒ 갤러리를 가지고 오는 권한과 갤러리 내 데이터 사용하는 권한은 다름! UIImagePickerController는 navigationController를 상속받아 사용한다. ✅ 사진..
23.08.23 수
·
iOS/🌱 SeSAC
leading / leadingMargin constraints to margin 체크박스 체크 유무 차이 위치 서비스 활성화 → 사용자 권한 확인 → 권한 결정 안되어 있다면 얼럿 → 바뀐 권한 체크 → 다시 권한 확인 → 허용 authorizedWhenInUse → didUpdateLocation viewDidLoad에서 권한을 체크하는 함수를 호출하지 않아도 권한 변경 함수가 호출이 된다. 주석처리 하지 않는 것이 좋다. 버그 이슈 🐞 버그 navigationController를 달고 화면 전환을 하면 권한 변경 메서드가 호출되지 않는다. viewdidload가 기본적으로 호출하는 것은 아니다. nav나 tab 등을 달고 화면 전환을 해야하는 경우라면 권한 체크 함수를 명시적으로 viewDidLoa..
23.08.22 화
·
iOS/🌱 SeSAC
💡 NSLayoutConstraints → addConstraints 사용하기 isActive addConstraints constraints → 여러개 추가 constraint → 하나 추가 addConstraints로 레이아웃에 대한 항목을 한 눈에 볼 수 있다. ✅ NSLayoutAnchor centerXAnchor → x축 중앙 뷰 객체가 safeArea를 벗어난다. safeArea 위로 constraints를 잡기 위해 view.safeAreaLayoutGuide.bottomAnchor 사용 🚨 view.addSubView를 작성하지 않는다면 런타임 오류 발생한다. 레이아웃을 잘못 잡은 것 처럼 오류가 난다. 뷰가 올라와 있어야 레이아웃을 지정하는데 올라오지 않은 뷰를 레이아웃 잡으려 하니 레이..
23.08.21 월
·
iOS/🌱 SeSAC
💡 알림 사용자가 권한을 허용해야 알림 가능 앱 재사용률(Retention)에 기여 앱이 종료 된 경우에도 사용자에게 표시 가능 ✅ willPresent 알림을 특정 화면이나 특정 조건에서만 포그라운드 알림을 받도록 할 수 있고, 또 특정 화면에서는 알림 안받기도 설정 가능하다. 특정 푸시를 클릭하면 특정 화면으로 이동 알림 개수 제한 : 하루에 하나의 앱에서 64개로 제한이 있다. identifier기반 이전에 등록된 알림을 제거하는 방식으로 더 보여주기도 한다. 카톡: 포그라운드 앱을 켜는 순간, 등록되어 있던 모든 알림들을 제거 ✅ 알림 스택 제거 알림 유효기간이 존재함(한달) identifier 기반으로 특정 알림을 지울 수 있다. 캘린더 기반 알림 설정 Date Components → 10시 5..
23.08.18 금
·
iOS/🌱 SeSAC
✅ Font asset은 copy bundle resources에 들어가있음 폰트파일 연결하기 폰트명을 찾아보자! 폰트 파일 명과 폰트명은 다를 확률이 높다. ✅ Dispatch Group 서로 다른 task들을 그룹화 하여 Queue에 보낸 task들이 작업을 완료할 때 까지 기다리고, 그룹화 된 task가 완료되면 notify를 통해 알림을 받을 수 있는 기능을 한다. QoS Quality Of Service 동시에 일을 맡기기는 하지만 먼저 작업을 했으면 좋겠는 작업 설정 background → 작업 중요도가 낮은(파일 다운로드) unspecified → 시스템에게 중요도 순위를 알아서 판단하라고 맡김 userInteractive → 중요도가 높은 작업 모든 일을 가장 먼저 혹은 늦게 하는 것은 아..
23.08.14 월
·
iOS/🌱 SeSAC
열거형은 저장 프로퍼티를 사용할 수 없다 → 인스턴스 생성 불가 static이 붙어있다면 상관 없다. 사용 가능 → 데이터 영역에 저장 연산 프로퍼티 static var photo → static 제거하면? 인스턴스 연산 프로퍼티 → 값을 저장하고 있지는 않고, 값을 사용할 수 있는 통로로서의 역할만 담당 인스턴스 연산 프로퍼티는 인스턴스 연산 프로퍼티만 사용 가능 타입 연산 프로퍼티를 사용할 수 없어서 오류가 난다. 타입 명시가 된다면 타입 프로퍼티 사용 가능하다. → 런타임 시 api 체크 요청을 했기 때문에 보라색 오류가 나타난다. → 동기, 순서대로 실행, 끝나는 지점 알 수 있음 버튼이 눌려있는 상태로 끝나길 기다린다. async 이미지는 메인 스레드에서 동작해야 한다. global async로..
테이블 뷰 셀 오류
·
iOS/🚨 오류 그리고 해결
오류 났을 때 바로 정리 좀 할걸.. 왜 안되지 하다가 해결하고 나서야 블로그를 쓸 생각을 했다.. 💻 구현 테이블뷰 컨트롤러를 이용하여 쇼핑 리스트 추가하기를 구현하고 있었다. 오른쪽에 즐겨찾기 버튼과 왼쪽에 체크박스 이미지를 놓고 별 버튼을 누르면 채워진 별로 즐겨찾기 활성화, 셀을 누르면 체크박스 이미지가 채워져 확인 완료 표시를 구현하려 했다. checked는 체크박스 체크 유무, like는 즐겨찾기 유무 🚨 문제 버튼 이벤트 적용한 후 리스트를 추가하면 즐겨찾기 버튼 이미지가 제멋대로 채워졌다가 사라지는 오류가 생겨남 셀을 선택하면 체크박스 이미지 뷰의 이미지를 변경하였으나, 리스트를 추가하면 체크박스가 모두 리셋이 됨. 🤯 나의 노력 테이블 뷰에대한 이해도가 매우 낮은 상태다 보니 어떤 메서드..
UserDefaults와 Sandbox System
·
iOS/💻 iOS Study
💡 UserDefaults 앱을 실행하는 동안에 키-값 쌍으로 데이터를 저장하는 기본 데이터베이스 인터페이스이다. 애플에서 기본으로 제공하는 저장소로 딕셔너리와 비슷한 구조를 가지고 있다. 런타임 시점에 기본 데이터베이스가 생성되고 .plist 파일에 저장이 된다. plist 파일은 Sandbox 내에 저장되기 때문에 앱을 꺼도 데이터가 유지되고, 앱을 삭제한 경우에만 데이터가 제거가 된다. UserDefaults를 사용할 때는 대용량 데이터나 사용자 정보와 같은 데이터보다는 자동로그인 여부, 알림 설정 여부, 인앱 결제 여부, 간단한 사용자 기본 설정 등과 같은 단일 데이터를 저장한다. 💡 App Sandbox ✅ Sandbox란? App Sandbox는 보호된 영역 안에서 프로그램을 작동시키는 보안 ..