ios 45

[ iOS 시행착오 ] CollectionView 데이터 업데이트하기 (Performing reloadData as a fallback — Invalid update)

👩‍💻배경👩‍💻 CollectionView를 사용하면 cell 삭제, 추가, 변경 등 다양한 이유로 데이터를 업데이트해야 한다. 그때 reloadData, reloadSection, deletedItem, insertItem 등 데이터 변경 관련하여 CollectionView의 레이아웃을 업데이트해주는 메서드를 사용한다. 유효하지 않은 업데이트 [UICollectionView] Performing reloadData as a fallback — Invalid update: invalid number of items in section 0. ... deleteItem 메서드를 사용해 CollectionView를 업데이트하려 하는데 위와 같은 오류가 발생하고 collectionView에 어떠한 변화도 없었다..

개발 시행착오 2023.03.01

[ iOS ] ScrollView 화면 캡쳐하기 (Image Creation)

문제무다, 꾸주니 등 몇몇 앱들은 화면을 캡쳐한 듯 이미지화해 저장 또는 공유하는 기능을 제공한다. 오늘은 이 기능을 구현할 예정인데, 화면 캡쳐에서 더 나아가 화면 밖 아래로 내용이 계속 이어지는 ScrollView의 전체 화면을 캡쳐하는, 즉 이미지화하는 작업을 정리할 것이다. 이 기능을 구현하여 UIActivityViewController를 사용해 이미지를 인스타그램에 공유할 수 있다. UIGrapics~UIKit에는 Image와 PDF 을 생성하고 Drawing 할 수 있는 여러 클래스와 함수들을 제공한다. 이번에 알아볼 함수는 Image와 PDF의 Image Creation 파트에 나오는 함수 중 아래 3개와 Drawing의 Shadows/Graphics Context Promitives의 함수..

iOS 2023.02.18

[ iOS/Git 시행착오 ] Push된 Info.plist를 .gitignore에 할당하기

👩‍💻배경👩‍💻 프로젝트를 진행하다보면 토큰 등 개인 정보를 사용해야 하는 경우가 많다. Local 저장소에서만 작업하는 경우에는 개인 정보 보호에 대해 크게 신경 쓸 필요가 없지만, Github과 같은 원격 저장소를 사용하는 경우에는 주의가 필요하다. 만약 미처 신경 쓰지 못하고 개인 정보를 원격 저장소에 올리게 된다면 해킹의 대상이 될 수 있다. 그리고 bundle을 사용하면 코드도 깔끔해지고 데이터 사용도 편리해서 중요한 데이터를 번들로 관리하면 좋다. 이와 같은 이유로 중요한 정보들을 Info.plist 넣고 이 plist 파일을 .gitignore에 추가하려 했다 .gitignore에 파일 추가하기 .gitignore에 파일을 추가하는 것은 정말 간단하다. .gitignore 파일을 열고 원하는..

개발 시행착오 2023.02.02

[ iOS ] UserDefaults - 커스텀 타입 저장하기 (Attempt to insert non-property list object 오류)

UserDefaults와 non-property list 오류 UserDefaults는 Float, Double, Int, URL 등 기본 타입에 대한 편리한 메서드들을 제공한다. 게다가 NSData, NSString, NSNumber, NSDate, NSArray, NSDictionary 타입이라면 UserDefaults에 자유롭게 저장 및 불러올 수 있다. 하지만 개발을 할 때에는 보통 아래 예시와 같이 커스텀한 타입을 사용한다. struct User { let name: String let age: String } 이 커스텀 타입의 객체를 생성해 UserDefaults에 저장해보자. let user = User(name: "사용자", age: "12") Userdeafaults.standard.se..

iOS 2023.01.21

[ iOS ] Property list

Property list property list는 객체 직렬화를 위한 파일이다. plist라는 확장자를 가지며 우리가 아는 info.plist가 바로 property list이다. property list는 용량이 작고 생성하기 쉬우며 serialization 작업이 용이하다. Cocoa Foundation과 Core Foundation은 property list를 serializarion하고 deserialization하는데 관련한 APIs을 가지고 있다. Property list : dictionaries, arrays, strings, numbers (integer and float), dates, binary data, and Boolean values + [ Swift ] Serializati..

iOS 2023.01.20

[ Swift ] Serialization이란?

검색을 통해 공부한 내용을 정리한 글입니다. 따라서 부정확할 수도 있고 추후 추가 공부를 통해 내용이 변경될 수도 있습니다. Serialization이란? Serializtion을 번역하면 '직렬화'이다. 직렬화란 간단하게 말하자면 어떤 데이터를 다른 형태로 변환하는 것을 말한다. 이 형태가 직렬적(시간 순차적)이라 직렬화한다고 표현한다. 조금 더 길게 설명하자면 데이터 구조 또는 객체의 상태를 추후에 저장될 수 있거나 전송될 수 있는, 또는 재구성될 수 있는 형식으로 변환하는 과정이다. 이에 반대되는 개념은 Deserialization이다. 번역하면 '역직렬화'로, 어떠한 형태로 변환된 것을 우리가 사용하는 형태로 변환하는 것을 의미한다. Serialization의 예시를 보면 조금 더 와닿는다. 앱 ..

Swift 2023.01.18

[ iOS ] 공유하기 기능 구현 - UIActivityViewController

목차 UIActivityViewController 생성하기 excludedActivityTypes를 사용해 필요없는 앱 제거 completionWithItemsHandler 처리하기 UIActivityViewController의 또 다른 Instance Property: allowsProminentActivity Apple에서 기본적으로 제공하는 '공유하기' 기능이 있다. 메일, 메모장, 클립보드 복사 등을 사용할 수도 있고, 카톡, 트위터, 페이스북 등 타 앱에서 공유기능을 지원한다면 개발자가 따로 구현할 필요없이 자신의 앱에서 타 앱으로 데이터 공유가 가능하다. '공유하기'는 UIActivityViewController 클래스를 통해 구현할 수 있다. UIAvtivityViewController는 U..

iOS 2023.01.03

[ iOS ] UIListContentConfiguration: CollectionView에 기본 Cell 사용하기 (14+)

공부 기록 TableView의 Cell에서 contentConfiguration 프로퍼티가 있듯이 CollectionView의 Cell에서도 contentConfiguration이 있다. 하지만 UITableViewCell에는 defaultContentConfiguration()이 있지만, UICollectionView에서는 해당 프로퍼티를 가지고 있지 않다. [ iOS ] contentConfiguration: TableView에 기본 Cell 사용하기 (iOS 14+) 공부 기록 UITableViewCell은 커스텀하지 않고도 cell을 구성할 수 있도록 여러 옵션을 제공한다. 가장 간단한 방법으로는 UITableViewCell의 프로퍼티 중 textLabel, detailTextLabel, imag..

iOS 2022.12.04

[ iOS ] contentConfiguration: TableView에 기본 Cell 사용하기 (iOS 14+)

공부 기록 UITableViewCell은 커스텀하지 않고도 cell을 구성할 수 있도록 여러 옵션을 제공한다. 가장 간단한 방법으로는 UITableViewCell의 프로퍼티 중 textLabel, detailTextLabel, imageView를 사용하는 것이였지만, iOS 14 이후부터는 이 프로퍼티들은 Deprecated 되어 더 이상 사용할 수 없다. 이것들을 대체하는 프로퍼티가 개발되었는데, 바로 contentConfiguration 이다. UIButton에서도 이와 유사한 프로퍼티인 configuration(iOS 15+)이 있다. 많은 Class들에서 Configuration이 등장하는 것으로 보아 개발자가 View 구성을 한 객체로 정리되며 재사용이 가능한 형태로 개발하도록 Apple에서 방..

iOS 2022.11.29

[ iOS ] UIButton.Configuration 사용하기(1) - Init, Title (iOS 15)

이 글은 iOS 15 버전을 기준으로 작성된 글입니다. UIButton.Configuration이란? iOS 2.0+ 부터 UIButton의 모양은 setTitle(:for:), setImage(:for:) 과 같은 UIButton의 인스턴스 메서드를 통해 설정할 수 있었다. 하지만 iOS 15+ 부터는 UIButton.Configuration이 추가되면서 새로운 방법으로 UIButton의 모양과 행동을 설정할 수 있게 되었다. Configuration은 이전에 사용하던 메서드들과 함께 사용할 수 있으며, 그 메서드들을 아예 대체할 수도 있다. Configuration의 장점은 기존 버튼의 모양과 행동을 수정하고 싶을 때 코드를 일일이 수정할 필요없이 새로운 Configuration을 구성한 뒤 UIBu..

iOS 2022.10.13

[iOS ] 데이터 전달 : (3/5) NotificationCenter로 전달하기

문제 다양한 방법으로 데이터 전달하기 1. Property로 전달하기 2. DelegatePattern으로 전달하기 3. NotificationCenter로 전달하기 4. Closure로 전달하기 5. 장단점 정리 NotificatonCenter로 전달하기 3 - 1 화면 전환 시 데이터를 전달하는 데에 여러가지 방법이 있는데, 그 중 NotificationCenter를 사용해 데이터를 전달하는 방법을 알아보자. NotificationCenter는 알림 발송 매커니즘(notification dispatch mechanism)이다. NotificationCenter는 알림이 게시(post)되면 등록된 옵져버에 알린다(broadcast). 알림을 받은 옵져버는 미리 설정된 메서드를 호출해 작업을 수행한다. ..

iOS 2022.06.21

[ iOS ] 데이터 전달 : (2/5) DelegatePattern으로 전달하기

문제 다양한 방법으로 데이터 전달하기 1. Property로 전달하기 2. DelegatePattern으로 전달하기 3. NotificationCenter로 전달하기 4. Closure로 전달하기 5. 장단점 정리 DelegatePattern으로 전달하기 2 - 1 화면 전환 시 데이터를 전달하는 데에 여러가지 방법이 있는데, 그 중 Delegate Pattern을 사용해 데이터를 전달하는 방법을 알아보자. 2의 ViewController에서 Delegate 프로토콜을 선언해 화면 전환 버튼의 액션함수에서 방금 선언해준 Delegate의 메서드를 호출한다. 이 메서드의 구현은 1의 ViewController에서 이루어진다. 메서드 호출 시 데이터를 인수로 넘겨주고, 구현 부분에서는 매개변수를 원하는 곳에..

iOS 2022.06.20
728x90