본문 바로가기

MOBILE

(49)
[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 값을 테스트..
[swift] PLS에서의 closure, swift에서의 closure swift는 함수형 언어이다. 함수형 언어라는 것은 함수가 일급 객체 (first-class object)라는 말이다. 그렇기 때문에 swift에서의 함수는 일급함수이며 일급 객체가 가지는 특성을 모두 가진다. 그렇다면 어떤 객체가 일등급이 되어 서울대에 갈 수 있는가(?) 일급 객체의 조건 1. 런타임에도 객체 생성 가능해야 함 2. 파라미터로 객체를 전달할 수 있어야 함 3. 반환값으로 객체를 전달할 수 있어야 함 4. 데이터 구조 안에 객체를 저장할 수 있어야 함 5. 할당에 사용된 이름과 관계없이 고유한 구별이 가능해야 함 swift에서의 함수는 다행히도 위의 조건을 모두 만족한다. 즉, 다음과 같은 코드들이 가능하다는 것이다. func function() { print("first class o..
[오류일기] NSException: this class is not key value coding-compliant for the key ___ ios ui kit을 다루던 중 빌드 오류를 발견했다. 빌드가 되다가 his class is not key value coding-compliant for the key 메세지를 띄우며 종료되는데 처음에는 코드의 문제인줄 알아서 코드를 계속 살펴보다가 도저히 답이 안나와서 찾아봤다. 결국 참조의 문제인 것이다.. 이 오류는 "내가 연결해둔 key ___ 를 찾을 수 없다"는 뜻인데, 따라서 왜 찾을 수 없는지 connection inspector를 살펴보면 된다 또는 객체를 오른쪽 클릭해서 inspector를 보면 됨 하..원인이 너무 어이없다. 처음에 outlet 변수 이름을 Img로 했다가 겹치는게 있어서 ImageView로 바꿨는데 참조는 여전히 Img로 하고 있으니 당연히 못찾는 거였다... 코드..
42seoul 6기 1차 한달간의 La Piscine 후기 (+본과정 합격) 42seoul 6기 1차로 1/3~1/28까지 약 한달동안 La Piscine 과정을 진행했다. 정확하게 어제 끝났다. 사실 라피신 전까지는 뭐 할만하겠지 했는데 그냥 나의 오산이었고요? 총평을 해보자면 "하루 12시간의 코딩 폐관수련" 이다. 진심으로 일정이 많이 타이트하다. 월~목: 개인 과제 및 평가 금: 정기 시험 토~일: 팀 프로젝트 마지막 주 특별 팀 프로젝트: bsq 이렇게 매주 반복하게 되는데 진짜 힘들다... 하루에 12시간씩 코딩하고 꿈에서도 코딩하는 꿈도 꿨음 주말? 없습니다. 휴일? 없습니다. 물론 내가 자체적으로 쉬면 그건 휴일이 됨. 아무도 강요 안함. 하지만 과연 그럴 수 있을까? ㅎㅎ 팀 프로젝트와 bsq는 난이도가 상당하다. 과제 난이도는 C와 리눅스 시스템 프로그래밍 위주..
Android Studio로 천문 현상 정보를 알려주는 앱 만들기 2021/09/01~2021/12/14 분명 api parsing을 가을에 했었는데 프로젝트는 겨울에 끝난 기묘한 이야기 1. Astro 🪐 울산에서 좀만 가면 경상남도에는 영남 알프스라는 산이 있다. 근데 이상하게도 거기 정상에는 뜬금없이 영화관이 하나 있다. 중학교 때 가족들이랑 심야영화를 보러 영남알프스 꼭대기에 갔었다. 근데 차에서 내리자마자 하늘에 별이 쏟아질 것 같다는 말이 무슨 뜻인지 그때 알게 되었다. 난 시티걸이었기 때문에 그런 별들을 처음 봤었다. 진짜 별이 엄청나게 많이 보이는데 책에서 봤던 알파별까지도 다 보여서 계절별 대별자리도 눈으로 볼 수 있을 정도였다. 그리고 난 그때의 기억이 너무 생생해서 아직까지도 그걸 다시 보기위해 살고 있을 정도이다. 하여튼 그때의 경험으로 내가 천문..