IOS

    [iOS] UserDefault를 활용한 저장, struct형태 저장, 구조체 배열 저장, 로드

    UserDefaults의 원리 - 저장: 요청 > struct 객체 > Data형 > 메모리, 디스크에 저장 * 아카이빙: 객체를 Data형과 같이 바이트 형태로 변경하는 작업이며 객체를 메모리, 디스크에 저장할 수 있는 파일 형시으로 만드는 것 - 로드: 요청 > 메모리, 디스크에 저장된 형태 탐색 > Data형 > struct객체로 변환 > 획득 * 언아카이빙: 메모리, 디스크에 저장된 Data형태의 바이트 형태를 스위프트의 struct 객체외 같은 형태로 변경하는것. 기본 타입인 Int, Double, String은 아카이빙, 언아카이빙이 내부적으로 UserDefaults를 사용할 때 적용이 되어서 바로 사용 가능하지만, struct같은 사용자 지정 타입의 경우 아카이빙, 언아카이빙 작업이 별도로 ..

    IOS - Xcode 오류 Application tried to present modally a view controller on itself

    Application tried to present modally a view controller on itself 뷰 컨트롤러를 인스턴스화하고 present하는 과정에서 바보같이 실수 guard let storyboard = self.storyboard?.instantiateViewController(withIdentifier: "stoyboard) as" storyboard else { return } storyboard.modalPresentationStyle = .fullScreen storyboard.present(storyboard, animated: true) 문제는 3번째 라인 storyboard.present(storyboard, animated: true) // 이라인을 아래처럼 수정 ..

    IOS - Xcode 오류 Could not insert new outlet connection: Could not find any information for the class named

    Could not insert new outlet connection: Could not find any information for the class named 무슨에러? 새로운 뷰를 생성하고 클래스 이름을 정확히 입력했으나 발생하는 에러. Xcode의 버그라고.. 해결방법? 방법 1. 해당 클래스에 @IBOutlet을 코드로 선언하고 연결하면 이후에 연결하는 컴포넌트들은 잘 연결됨. 방법 2. Xcode 재시작 방법 3. cmd + shift + k 로 클린빌드

    IOS - Xcode 오류 this class is not key value coding-compliant for the key profileButton.

    IBOutlet문제 @IBOutlet으로 연결해놨으나 삭제/주석 처리한경우 발생 오류가 발생한 Outlet이 위치한 뷰로 이동해서 사용하지않는 Outlet의 연결을 끊어주면 해결

    IOS - ViewController의 생명주기(Life Cycle)

    ViewController의 생명주기(Life Cycle) IOS에서 화면을 구성하는 요소인 ViewController가 나타나서 사라지기까지의 주기를 의미한다. 그림을 보면 will과 did가 반복적으로 사용된다 will은 ~할 것이다. 라는 뜻을 가지며 did는 ~했다. 라는 의미를 가진다. 이 주기들의 순서는 다음과 같다. ->loadView(뷰 로드) -> viewDidLoad(뷰가 로드되었다) -> viewWillAppear(뷰가 나타날 것이다) -> viewDidAppear(뷰가 나타났다) -> viewWillDisappear(뷰가 사라질 것이다) -> ViewDidDisappear(뷰가 사라졌다) -> viewDidUnload(뷰가 언로드 되었다) 1. override func loadVie..

    IOS - Navigation Bar Title 변경하는 방법

    1. Navigation Controller에 embed 했을 때 //1 title = " " //2 self.title = "" //3 self.navigationItem.title = "" //4 self.navigationController?navigationbar.topItem.title = " " 2. Navigation Controller와 Tab Bar Controller가 함께 1. self.navigationItem.title= " " 2. self.navigationController?.navigationBar.topItem?.title = " " 3. Navigation Bar만 추가했을때 (Navigation Controller로 생성된 bar가 아닐경우) //Outlet변수로 추가..

    IOS - PickerView

    피커뷰를 사용하려면 컬럼의 갯수에 상관없이 UIPickerViewDataSource, UIPickerViewDelegate라는 프로토콜을 채택해야함. 먼저 UIPickerViewDataSource를 채택한 뷰 컨트롤러는 자기 자신을 피커뷰의 datasource로 등록해야한다. 뷰 컨트롤러가 피커뷰에 표시할 데이터와 UIPickerView사이의 다리 역할을 한다. //피커뷰의 열 개수를 넘김 func numberOfComponents(in pickerView: UIPickerView) -> Int { return pickerViewCnt } //피커의 항목 개수를 넘김 func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component..

    IOS - 사용자에게 알람 승인을 구하는 법.

    우리들은 앱을 처음 설치하고 열었을 때 "이 앱에서 오는 알림을 받으시겠습니까?" 하는 별도에 Alert을 기억 할텐데 그런 식으로 만약에 사용자가 허용을 하지 않으면 우리가 잘 설정해 놓은 이런 알람도 사실상 앱에 표현되지 않는다. 어쨋든 이러한 허용을 받아야만 보낼 수 있는 구조로 되어있기 때문에, 사용자의 승인을 구하는 코드를 추가해야한다. AppDelegate.swift파일에서 UserNotifications를 추가해준다. //AppDelegate.swift import UIKit import UserNotifications 그리고 didFinishLaunchingWithOption에서 구현한다. class AppDelegate: UIResponder, UIApplicationDelegate { ..

    IOS - 화면 터치 시 키보드 내려가기

    TextField를 터치해서 키보드가 활성화 되고, 아무 처리를 하지 않으면 키보드가 사라지지 않아서 해당 위치에 있는 버튼들을 사용하기 힘들 때가 있다. return키를 누르면 키보드가 내려가게 할 수도 있지만 일반적으론 그냥 바닥화면을 터치하면 키보드가 내려가게 코딩한다. ViewController 아래에 코드를 추가해주면 화면 터치 시 키보드가 내려간다. 클래스내에 override를 추가해준다. 예) import UIKit class MainVIewController: UIViewController{ override func viewDidLoad() { super.viewDidLoad() } //소스들... //키보드가 내려가게 하는 코드 override func touchsBegan(_ thouc..

    IOS - AutoLayout의 Hugging, Compression Resistance Priority

    Xcode에서 UI컴포넌트들을 클릭하면 Hugging Priority와 Compression Resistance Priority를 설정할 수 있다. Hugging priority는 늘어나는 우선순위 Compression Resistance priority는 줄어드는 우선순위 여러 오브젝트 중 하나가 커져야 하는 상황 -> Hugging priority 여러 오브젝트 중 하나가 작아져야 하는 상황 -> Compression Resistance priority 두 우선순위 모두 크기가 높으면 자신의 크기를 유지한다.