iOS에서 커스텀으로 사진첩을 개발하려고 할 때 보통 PhotoKit을 import 후, PHAsset으로 사진첩의 이미지를 불러와서 개발을 합니다. 그런데 다음과 같이 사진첩을 개발한 앱을 사용하는데 어떤 앱에서는 사진이 잘 선택되고 어떤 앱에서는 사진을 선택 시, 앱이 크래쉬가 나며 종료되었습니다. 그나마 앱 크래쉬 현상도 매번 일어나는 것이 아니라 간헐적으로 일어나더라고요.. 몇 시간의 삽질 결과... 앱 크래쉬 현상이 일어나는 경우는 iCloud로 부터 이미지 정보를 불러오려고 할 때 오류가 발생하였습니다. iCloud에서 사진 데이터를 불러와야 하는데 Network Access가 허용되지 않아서 UIImage가 nil로 전달되는 문제였습니다. 이를 해결하기 위해서 PHImageRequestOpt..
WKNavigationDelegate WKNavigationDelegate 함수를 이용하여 웹 페이지 탐색을 수락하거나 거절하고, 웹 페이지 요청의 과정을 추적한다고 합니다. WKNavigationDelegate 함수들을 하나씩 알아보겠습니다. 1) decidePolicyFor 이 메서드는 WKWebview에서 새로운 페이지를 로드하기 전에 해당 페이지 요청에 대한 네비게이션 정책을 결정합니다. 이 메서드를 사용하여 링크가 클릭되었을 때 페이지를 로드하기 전에 해당 링크가 안전한 도메인에서 온 것인지, 악성 스크립트를 실행하거나 불법적인 컨텐츠를 제공하는지 여부를 확인할 수 있습니다. webView: 이 메서드가 호출된 웹 뷰입니다. navigationAction: 네비게이션 요청에 대한 정보를 제공합니..
카카오톡 공유하기 기능을 구현하면서 배운 것들을 정리하였습니다. 우선 카카오톡 공유하기 API를 사용하기 위해서는 사전에 여러 설정이 필요합니다. 1) Kakao SDK 설치 프로젝트의 Podfile에 Kakao SDK를 전체 또는 모듈(Module) 별로 추가합니다. 저는 필요한 모듈만 추가하였습니다. # 전체 추가 pod 'KakaoSDK' # 필요한 모듈만 추가 pod 'KakaoSDKShare' pod 'KakaoSDKTemplate' 2) Kakao Developer 로그인 후, 애플리케이션 추가 Kakao Developer 로그인 > 내 어플리케이션 > 애플리케이션 추가를 진행합니다. 3) iOS 플랫폼 등록 플랫폼 > 플랫폼 설정하기 버튼 > iOS 플랫폼 등록 저는 간단하게 테스트만 진행..
GCD (Grand Central Dispatch) 동시성을 제공하기 위해 사용하는 API Queue에 작업을 보내면 알아서 스레드를 할당하고 안전하게 수행 GCD에서 사용하는 Queue의 이름이 Dispatch Queue 즉, DispatchQueue에 작업을 추가하면 GCD는 작업에 맞는 스레드를 자동으로 생성해서 실행하고, 작업이 종료되면 스레드를 제거 동시성 프로그래밍 - 싱글코어 환경에서 멀티태스킹을 위해 시간을 분할해서 여러 프로세스와 스레드를 번갈아가며 실행함이 과정이 너무 빠르다 보니 동시에 실행되는 것처럼 보이는 것을 말함 - 싱글 코어(멀티 코어에서도 가능)에서 멀티스레드를 동작시키키 위한 방식 queue.sync { task } 동기 vs queue.async { task } 비동기 ..
정의 위임자를 갖고 있는 객체가 다른 객체에게 일을 위임하는 형태의 디자인 패턴 패턴 요소 delegate를 필요로 하는 인스턴스 (UITableView) delegate 요구사항을 정의한 프로토콜 (UITableViewDelegate) delegate로서 동작하는 인스턴스 (UIViewController) 사용하는 이유 UI요소(TableView)에서 Delegate 패턴을 사용하는 이유 Cell이 탭되었을 때 어떤 행동을 할지는 상황에 따라 다르므로 개발자가 코드를 작성해야함 개발자가 UI요소의 내부 코드를 수정할 수 없음 따라서 다른 객체에서 해당 코드를 작성한 뒤, 테이블 뷰가 그 객체의 코드를 호출해줘야 함 커스텀으로 Delegate 패턴을 사용하는 이유 코드의 유연성과 재사용성을 높일 수 있음..
파이썬에서 리스트의 요소를 제거하는 방법을 알아보겠습니다. 1. 인덱스로 제거 (1) del del 리스트명 [인덱스] nums = [1, 2, 3, 4] del nums[2] print(nums) # [1, 2, 4] (2) pop 리스트명.pop(인덱스) nums = [1, 2, 3, 4] nums.pop(2) print(nums) # [1, 2, 4] pop 안에 인덱스를 적지 않으면 자동으로 -1이 들어가서 맨 뒤의 요소가 사라지게 됩니다. 2. 값으로 제거 (1) remove 리스트명.remove(값) nums = [1, 2, 3, 4, 2] nums.remove(2) print(nums) # [1, 3, 4, 2] 리스트 안에서 같은 값을 가진 요소를 삭제합니다. 다만, 해당 값을 가진 모든 ..
- Total
- Today
- Yesterday
- OS
- PHAsset
- 개발동아리
- cs
- 디프만
- PHImageRequestOptions
- isNetworkAccessAllowed
- Xcode
- webcrawl
- 쓰레드
- swiftsoup
- 슈퍼스칼라
- 운영체제
- ios
- setBackgroundColor
- optional
- rxcocoa
- 프로세스
- 부캠
- returnKey
- Swift
- 멀티프로세스
- RxSwift
- sharedmemory
- WKUIDelegate
- 프로세스간통신
- 스냅킷
- URLComponents
- 스레드
- 개발대외활동
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |