MOBILE/ios (28) 썸네일형 리스트형 [iOS] segue 객체를 이용한 화면 전환 처리하기 ios 에서는 다양한 방식으로 화면을 전환할 수 있다. 크게 4가지 정도이다. 화면 전환 방법에 따라 이전 화면으로 돌아가는 방법도 달라진다. 화면 전환 방법 1. 뷰를 전환하기 2. 뷰 컨트롤러를 전환하기 3. 네비게이션 컨트롤러에 의한 화면 전환 4. 세그웨이에 의한 화면 전환 1. 뷰 자체를 전환하기 뷰 자체를 전환하는 방법은 하나의 뷰 컨트롤러 안에 루트 뷰 두개를 두고 전환한다. 하지만 이는 뷰 컨트롤러:루트뷰 = 1:1 이라는 MVC 패턴을 벗어나므로 좋지 않다. 또한 뷰 컨트롤러의 루트 뷰를 가져와서 올릴 수도 있지만 이 또한 뷰의 소속 컨트롤러는 무엇인지 모호해지기 때문에 좋지 않은 방식이다. 2. 뷰 컨트롤러를 전환하기 뷰 컨트롤러를 전환하는 방식은 가장 많이 쓰인다. 이미 present.. [iOS] core data를 이용하여 데이터를 영구 저장하기 core data : application에서 모델 계층의 객체를 관리하는 데 사용하는 프레임워크 ios에서 데이터를 영구 저장하는 방법은 다양한데, 그 중에서도 core data는 애플이 코코아 개발환경을 통해 제공하는 In-Memory 방식의 데이터 관리 프레임워크이다. In-Memory 방식이므로 모든 데이터를 다루는 작업은 메모리에서 동작한다. (In-Memory 방식은 뒤에서 설명) 즉 읽고 쓰는 데이터들은 모두 메모리에 로드한 다음에 메모리에서 읽거나 쓰기 작업을 수행하고 그 결과를 저장소에 반영하는 것이다. 한마디로 영구 저장소에 직접 데이터를 쓰거나 읽는 일이 없다는 점이 SQLite와 다른 점이다. 그냥 개발자와 영구 저장소를 이어주는 프레임워크이다. core data의 데이터 저장 구조.. [iOS] UITableViewController delegate method 모아보기 UITableViewController : UIKit 에서 데이터를 리스트 형태로 보여주기에 적합한 view controller는 Table View Controller이다. 위와 같이 데이터를 리스트 형태로 표현 가능하여 직관적으로 데이터의 목록을 볼 수 있다. table view의 계층 관계는 다음과 같다. 테이블 뷰 컨트롤러 -> 테이블 뷰 -> 테이블 뷰 cell -> content view 이때 하나의 테이블 뷰에는 여러 개의 테이블 뷰 섹션이 있을 수 있다. 섹션은 그룹과 비슷하다. 이러한 table view controller 가 정의되어 있는 곳을 보면 다음과 같다. UITableViewController 는 UIViewController를 상속받고 UITableViewDelegate, U.. [iOS] Codable protocol을 사용하여 json data parsing하기 swift에서 json 데이터를 parsing 할 수 있는 방법은 여러가지이다. 그 중에서도 swift4 에 출시된 codable은 코드 단 5줄 이내로도 쉽게 json 데이터를 파싱할 수 있도록 해준다. 이에 대해 알아보자 애플 공식 문서를 살펴보면 codable은 type alias라고 되어있다. 즉 Codable = encodable + decodable 이다. 원래 swift에는 decodable, encodable 프로토콜 두가지를 모두 제공하였다. 이를 합친것이 codable이다. 이때 데이터를 encode, decode 한다는 것은 다음과 같은 의미이다. encode: 데이터를 원하는 프로토콜로 변환 decode: 데이터를 내가 사용하고자 하는 모델로 캐스팅 json을 예시로 들자면 다음과 .. [iOS] UserDefaults와 커스텀 프로퍼티 리스트를 이용하여 데이터를 영구 저장하기 앱의 데이터는 실행 중에 메모리에 저장되지만 이는 휘발성이므로 앱을 종료하면 사라진다. 하지만 사라지지 않아야 하는 데이터는 어떻게 보관할 수 있을까? 예를 들면 메모장의 데이터나 일정과 같은 데이터들을 사라지지 않게 보관하는 방법에 대해 알아보자 코코아 터치 프레임워크는 다음과 같이 다양한 수준의 데이터 저장 방식을 제공한다. UserDefaults/ 커스텀 프로퍼티 리스트 : key-value 형태로 저장되는 간단한 데이터를 저장하는 방식 코어 데이터/ SQLite : 지속적으로 추가되거나 구조적으로 관리가 필요한 데이터를 저장하는 방식 아카이빙 (Archive) : 일반 데이터 타입으로 표현 불가능한 데이터를 저장하는 방식 즉 특정 순간 인스턴스 객체의 데이터 자체를 캡쳐하여 그대로 저장하는 방식이.. [swift] 클래스 상속과 초기화 메소드: 지정 초기화 메소드 vs 편의 초기화 메소드 swift에서의 상속과 초기화 메소드의 기본 swift에서 클래스 선언과 상속은 다음과 같은 형태로 이루어진다. 하지만 다음 코드는 오류를 발생시킨다. 왜 일까? 바로 초기화를 하지 않았기 때문이다. class A { var a: Int var b: Int } class B: A { var c: Int } 클래스에서 가장 중요한 것은 초기화이다. 물론 옵셔널 타입은 굳이 nil을 대입하지 않아도 자동으로 nil로 초기화를 해준다. 하지만 옵셔널 타입을 제외한 모든 저장 프로퍼티는 인스턴스가 생성되기 전에 무조건 초기화가 완료되어야 한다. 즉 다음 형태와 같아야 한다는 뜻이다. class A { var a: Int = 0 var b: Int = 0 } class B: A { var c: Int = 0 } .. [iOS] 화면전환 method present(_:animated:completion:) 의 비동기식 처리 ios에서 화면을 전환하는 방식은 여러가지인데 그 중에서 가장 classic한 방법은 바로 present 메서드를 사용하는 것이다. 화면 전환 스타일 중 "modally" 방식으로 화면을 전환해주며 view controller에 의한 화면 전환이다. "modal"이라는 것은 화면 외에 나머지 영역이 비활성화되어 사용자는 상호작용을 할 수 없는 방식을 말한다. (alert 중에서 .alert 형태의 사용자 알림창이 modal 형식이다.) 이때 중요한 것은 파라미터 중 completion 인데, 이는 화면 전환이 완전이 끝난 후에 실행될 코드를 보장해준다. 단순하게 present 메서드 뒤에 적히는 코드는 실행이 될지 안될지 보장해주지 않는다. 왜냐하면 화면 전환은 비동기로 이루어지기 때문이다. 따라서 화면.. [iOS] TextField.text는 nil이 되지도 않으면서 왜 optional일까 ios 개발에서 사용자의 text를 입력받는 swiftUI는 textField이다. 오늘 프로젝트 개발 중, textField 값이 없을 때와 초기 상황에서의 이벤트를 처리하기 위해 코드를 작성하고 있었는데 알 수 없는 부분을 발견했다. xcode에서 UIlabel의 text를 quick help로 살펴보면 다음과 같은 문서를 볼 수 있다. 즉, textField의 text는 분명 optional type으로 정의되어 있다. 정확하게 말하면 옵셔널 연산 인스턴스 프로퍼티이다. 그런데 문제는 text 속성은 기본으로 "" 빈 문자열을 return 한다는 것이다. 그렇다면 nil은 언제 반환되는 것일까? 1. 유저 입력이 없는 초기 상황 처음에 view가 load되고 textField의 text 값을 테스트.. 이전 1 2 3 4 다음