[iOS] App Development 57

[iOS] 다이어리 데이터 FireStore CRUD 방법 / 모델 구조 / 실시간 업데이트하는 법 / Timestamp to NSDate 타입변경

FireStore와 다이어리 iOS App을 연동하며 드는 의문점들과 솔루션 다이어리 데이터 FireStore CRUD 방법 모델 구조 실시간 업데이트하는 법 Timestamp to NSDate 타입변경 1) FireStore에 어떤 모델 구조로 저장해야하는지와 데이터 추가 방법 FireStore Datamodel Collection - 폴더(Users) Document - 문서(Dahae) Data - 문서안의 내용(name, bornDate, address...) Each Individual Data를 만들어줌 name, sender, content of message, timestamp Dictionary와 Json을 사용할 수 있다. 아래와 같이 Diary 모델 구조를 짜보았다. // // Dia..

[iOS] 특정함수 특정 시간에 호출하기 / String->Date로 타입변환시 Date Format 관련 유의사항

D-Day앱을 만들며, 밤 12시가 지나면 하루가 지나기에 D-Day계산을 다시 해줘서 데이터를 뿌려줘야 했다. 1. 특정 시간에 함수 호출하는 법 // 특정시간에 실행되도록 let calendar = Calendar.current let now = Date() let date = calendar.date( bySettingHour: 22, minute: 03, second: 0, of: now)! let timer = Timer(fireAt: date, interval: 0, target: self, selector: #selector(runCode), userInfo: nil, repeats: false) RunLoop.main.add(timer, forMode: RunLoop.Mode.common)..

[iOS] UIToolbar에서 UIBarButtonItem Alignment 조정하기, 양끝정렬로! programmatically

UIToolbar에서 UIBarButtonItem Alignment 조정하기 아래의 코드를 이용하여 배열에 공백을 주고싶은 부분에 추가하여 정렬하면 된다. let flexibleSpace = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: self, action: nil) 결과 func createDatePicker() { dDayField.textAlignment = .center // toolbar let toolbar = UIToolbar() toolbar.sizeToFit() // done button let doneBtn = UIBarButtonItem(barButtonSystemItem: .done, target: nil, actio..

[iOS] 다른 뷰컨의 함수 호출하기 : Call Another Viewcontroller's Function(NotificationCenter)

프로젝트 진행중 아기이름을 수정하는 기능 개발 중 다른 뷰컨의 함수를 호출하는 기능이 필요했다. 셋팅화면에서 babyName을 수정했을 때 발생하는 이벤트는 다음과 같다. 1) textField에 입력한 데이터 firestore에 update 2) 메인뷰컨의 아기이름 레이블에 firestore데이터 한번 더 조회 get 해서 업데이트해주기(변경된 아기이름 반영) iOS 이벤트 전달은 아래의 3가지로 구현할 수 있는데. - 컴플리션 블럭 클로저 - 프로토콜 델리게이트 - 노티피케이션센터 2)번 진행시 notificationCenter를 아래와 같이 활용하였다. 메인뷰컨 // import 아래에 상수로 이름 구현 let notificationName = "updateMainViewNotification" v..

[iOS] 설정화면 -> 설정 디테일 화면 구현 방법(tableView)

설정화면 구현시 궁금한 점 위 인스타그램 설정화면 처럼 1) 테이블뷰에서 이름설정, 생년월일 설정, 로그아웃 설정을 할 때, 해당 row 선택시 각 테이블뷰의 indexPath를 알아내서 서로 다른 뷰컨으로 보내는 것이 일반적인가? 2) 혹은 같은 뷰컨으로 보내지만, 하단의 내용만 달라지게 하는 것인가? => 일반적으로는 1)으로 화면마다 하나씩 뷰컨을 따로 만듬! + didSelectRowAt에서 선택한 indexPath 정보를 기반으로 다른 뷰컨으로 보내는 방법은 무엇인가? extension SettingViewController: UITableViewDelegate { func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexP..

[iOS] 디자인패턴 : MVVM

디자인패턴 왜 필요한가? - 객체지향 설계에서 변화를 최소한 줄여줄 수 있는 기술을 제공한다. - 새로운 기능이 추가되고 성능을 최적화할 시에 버그 등, 의도치 않은 결과를 불러일으킬 확률을 최소화 한다. - 유지보수가 용이한 소프트웨어를 만들 수 있다. (다른 사람이 작성한 코드를 더 쉽게 이해할 수 있다.) - 공용어의 힘을 사용할 수 있다. “자, 나는 broadcast라는 클래스를 만들었어. 이 클래스는 모든 객체가 이 클래스를 예의 주시하고 있지. 언제라도 새로운 데이터가 이 클래스로부터 만들어지면 모든 리스너가 이 메시지를 받아. 가장 멋진 점은 리스너가 broadcast에 어 때이든지 참가할 수 있고 빠질 수 있다는 거야.” 아니면, “자, 난 broadcast 클래스를 옵저버 패턴으로 만들..

[iOS] 기본 개념 정리 #9 : FireStore 적용 / 데이터 추가

* iOS 개인 프로젝트 시작 전 기본 개념 복귀 차원으로 내용을 정리합니다. messageTextfield.text 와 Auth.auth().currentUser 가 둘 다 nil이 아니면 각 messageBody와 messageSender에 담 내부 코드를 실행한다는 의미임. Auth.auth().currentUser?는 로그인한 유저가 있을 경우 정보가 나오고 아니면 nil이 찍힘 FireStore 데이터 추가 데이터 딕셔내리 만들고, error completion block에 print 찍어보기 에러 해결 [Firebase/Firestore][I-FST000001] Write at users~~failed: Missing or insufficient permissions. 규칙 => allow r..

[iOS] 기본 개념 정리 #8 : UITableVieCell, Cell.xib

* iOS 개인 프로젝트 시작 전 기본 개념 복귀 차원으로 내용을 정리합니다. Customizing Cells in a TableView using a .xib File View폴더에 생성한다 우측 클릭 - New File - Cocoa Touch Class - [subclass of] UITableViewCell Also create XIB file / Swift로 체크 및 설절하고 Targets에 프로젝트 체크 필수 Nib은 old name for the xib! UITableViewCell을 디자인 해보자 xib 파일에 라이브러리 - UIView 추가 인스펙터에서 백그라운드 변경 라이브러리 - Label 추가 라이브러리 - UiImageView 추가 label과 UiImageView 추가한 후 ho..

[iOS] 기본 개념 정리 #7 : Static Keyword / TableView / TableViewCell / UITableViewDataSource / UITableViewDelegate

* iOS 개인 프로젝트 시작 전 기본 개념 복귀 차원으로 내용을 정리합니다. Using a Constants File and Understanding the static Keyword String으로 만들면 오타를 만들기 쉽다. String으로 계속 타이핑하기보다 constant파일로 만들어서 코드로 타입하게 한다. swift 파일 만든다. struct Constants { } 아래처럼 stuct 내부에 static keyword를 만든다. static은 let을 constant데이터 타입으로 만들어줌 => Constants 객체를 만들어주는게 아니라 가져오는 것임 static let을 사용하면 struct 객체를 만들 필요가없이 바로 사용할 수 있다. 아래의 예시를 보자. static let을 선언해..

[iOS] 기본 개념 정리 #6 : Firebase/Auth 회원가입, 로그인, 로그아웃, 네비게이션바에서 back 버튼 없애기

* iOS 개인 프로젝트 시작 전 기본 개념 복귀 차원으로 내용을 정리합니다. Adding Firebase to your Project Firebase 로그인 대시보드에서 iOS 추가 설명대로 진행하면 됨. 단, podfile에서 내가 사용할 firebase를 찾아서 설치하기 Auth: 회원가입 로그인 기능 / Firestore 데이터베이스 설치 회원가입하고 파이어베이스로 보내서 확인하고 바로 채팅 뷰컨으로 보내기 로그인 가능할 경우 파이버에스에서 확이낳고 바로 채팅 뷰컨으로 보내기 회원가입 파이어베이스 대시보드 - authentification - 사용할 인증 체크온 create new user하기 레지스터 버튼 누르는 IBAction에 아래 코드 삽입 import Firebase / email과 pa..