본문 바로가기

반응형

Swift

Failed to set user defined inspected property 에러 처리 설명 커스텀 클래스를 만들고 @IBInspectable를 사용하는 경우에 해당됩니다. 에러메세지 Failed to set (borderColor) user defined inspected property on (UIButton): [ setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key borderColor. Failed to set (borderWidth) user defined inspected property on (UIButton): [ setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key borderW.. 더보기
ios simulator의 SQLite를 DB Browser 확인하기 들어가기 전 ios를 개발하면서 sqlite를 사용하는 경우 DB Browser에서 보고 데이터나 테에블을 관리하고 싶을 때가 있어서 정리한 글입니다. 해당 글은 ios Simulator & DB Browser for SQLite를 기준으로 작성하였습니다. 1. SQlite 파일이름 가져오기 아래와 같이 경로와 파일이름을 지정한 경우 dbTest.sqlite를 사용합니다. guard let docPathUrl = fileManager.urls(for: .documentDirectory, in: .userDomainMask).first else { return "" } let dbPath = docPathUrl.appendingPathComponent("dbTest.sqlite").path 2. 터미널에서.. 더보기
SQLite 데이터 값이 제대로 들어가지 않을 때 unsafeBitCast 사용하기 포인터에 대한 개념이 부족하여 해당함수에 대한 완벽한 이해가 잘 되지 않지만 참고하고 나중을 위해 정리한 글이기 때문에 사실과 다르거나 제가 오해하는 부분이 있을 수도 있으니 참고해주시기 바랍니다. 설명 sqlite 사용하면서 데이터 추가할 때 테이블의 칼럼이 3개 이상일 때에는 마지막 칼럼값으로 값들이 들어가거나 의도하지 않는 값들이 들어가는 것을 확인하였습니다. 그리고 unsafeBitCast 함수를 사용해서 해결할 수 있었습니다. 문제되는 코드 guard prepare(with: sql) else { throw SQLError.prepare } guard bindText(with: name, at: 1) else { throw SQLError.bind } guard bindText(with: bir.. 더보기
Tabbar 안에 StoryBoard 여러개 관리하는 방법 두 가지 방법의 초기결과는 동일하지만 설정방법이나 관계에 있어서 첫번째 방법이 더 괜찮다고 생각합니다. 첫번째 방법 Storyboard 파일 생성 (필요한 개수 만큼) 메인 스토리보드에서 TabbarViewController 생성 및 기본 연결된 VC 제거 오른쪽 상단 라이브러리 추가 버튼을 클릭하고 Storyboard Reference 추가 (1번에서 만든 Storyboard 개수 만큼) 컨트롤 + 마우스 왼쪽 드래그 한 후에 3번에서 만든 SR에 연결 및 Relationship Segue 밑에 view controllers 선택 Attributes inspector 클릭 및 첫번째 칸에 storyboard 지정 각 스토리보드에서 VC or navigationVC 생성 및 inital VC 지정 각 V.. 더보기
WKWebview를 이용한 Javascript, Swift 양방향 통신 아래 작성된 방법은 WebView 가 로드될 때 실행되는 것을 기준으로 하였으며 네이티브 앱에서 버튼을 누르거나 특정 동작을 할 때 Javascript 로 값을 전달하고 싶은 경우에는 아래 블로그에 나온 방법(evaluateJavascript)을 참고합니다. evaluateJavascript 참고 블로그 [SWIFT] 웹뷰와 자바스크립트 연동 (Native JavaScript 통신 방법) 1. Swift → Javascript 1) Javascript의 test() 함수 실행할 때 import UIKit import WebKit class ViewController: UIViewController() { var webview: WKWebView! override func loadView() { let w.. 더보기
@IBDesignable , @IBInspectable in Custom Object 사용된 예제는 꼼꼼한 재은씨의 Swift : 실전편 을 토대로 작성하였으며 설명 또한 인용한 부분이 있습니다. @IBDesignable 커스텀 객체(버튼, 스테퍼 등)를 스토리보드에서 미리보기 하고 싶을 때 해당 클래스 정의 구문 위에 추가합니다. @IBInspectable 커스텀 객체(버튼, 스테퍼 등)의 속성을 스토리보드 내에서 변경하고 싶은 경우 해당 속성을 선언할 때 추가합니다. 설명 커스텀 객체를 만들 때 프로그래밍 방식을 사용하면 디자인 요소에 변화를 주는 경우 빌드를 한 다음 확인을 해야 하는 번거로움이 있지만 @IBDesignable 을 사용하면 스토리보드에서 미리 보기가 가능합니다. 또한, @IBInspectable 을 사용하여 인터페이스 빌더를 통해 커스텀 객체의 속성을 설정할 수 있습.. 더보기
sizeToFit 함수와 center 속성을 함께 사용하는 경우에 작성 순서 sizeToFit 뷰의 크기에 맞게 변경, UIView 의 함수 이며 아래와 같이 Label 에 사용하는 경우에는 해당 라벨 길이에 맞게 크기가 변경됩니다. center 뷰 프레임 사각형의 중심점, 이 역시 UIView 의 함수 이며 Label 프레임의 중심점을 정합니다. 설명 아래와 같이 라벨을 만들 때 sizeToFit 과 center 를 사용하는 경우에는 sizeToFit 을 호출한 후에 center 속성을 설정 해주는 것이 바람직합니다. center 속성은 해당 라벨의 중심점을 정해 주는 역할인데 sizeToFit 함수보다 먼저 오는 경우에는 라벨을 선언했을 때의 길이(y: 100)를 기준으로 설정하기 때문에 원하는 대로 화면에 표시되지 않습니다. 그렇기 때문에 sizeToFit 함수를 호출하여 .. 더보기
클래스 내에 멤버 변수를 사용할 때 초기화 시점에 따른 메모리 차지 비교 인스턴스 label1 은 선언과 동시에 초기화 label2 은 선언과 초기화를 분리하고 viewDidLoad 에서 초기화 설명 프로그래밍 방식의 UI 생성을 연습하기 위해 작성한다면 아래와 같은 코드는 큰 차이점이 없습니다. 하지만 뷰 컨트롤러의 인스턴스만 생성한 후 화면으로 이동하지 않는다면 label1 인스턴스는 메모리만 차지하게 됩니다. 반면, label2 인스턴스는 뷰 컨트롤러가 화면에 표시될 때 인스턴스가 생성되므로 메모리를 미리 차지하지 않습니다. 즉, 특별한 경우를 제외하고 클래스 내에 멤버 변수로 인스턴스를 사용한다면 label2 처럼 사용하기 직전에 인스턴스를 생성하여 메모리를 할당 받는 것이 메모리를 효율적으로 사용할 수 있습니다. 코드 #import UIKit class Cust.. 더보기

반응형