XCode 11.1 업데이트 이후 갑자기 RealmSwift 에서 아래와 같은 메시지를 출력후 앱이 죽었다. Terminating app due to uncaught exception 'RLMException', reason: 'Primary key property ...... 찾아보니 RealmSwift를 업데이트 해주면 괜찮다고 한다. Podfile 의 pod 'RealmSwift', '3.18.0' 로 버전을 업데이트 해준다. 만약 해당 버전을 못 찾는다면 pod repo update 를 입력후 pod install 이나 pod update 를 해주면 된다. 참고 : https://github.com/realm/realm-cocoa/issues/6250
Android 도 같은 프로젝트를 만들었는데, iOS 도 비슷하게 만들면 어떨가 해서 만들어 보았다. 테이블 레이아웃처럼 사용 가능하면서 동시에 recycle 되기 때문에 갯수에 상관없이 성능상 큰 지장 없이 사용 가능 하다. 누군가에게 도움이 되길 바란다. Full Source Code : https://github.com/JeonGuKang/iOS-Fixed-Header-Horizontal-Scroll
개발을 하다가 아래와 같은 테이블 구성 기능이 필요한 View 가 필요했는데 , 대부분 TableView를 추천해 주었다. 하지만.. 문제가 되는건 역시 성능 이슈, 저런 튜플 데이터를 몇 백개를 보여주고, 그게 보여질 여러 타입의 View 들중 하나라면? 단순하게 ScrollView 에 모든 View 들을 넣고 Scroll을 한다면 어마어마하게 버벅일 것이며, 심할 경우 뷰가 로딩 될때까지 몇초의 시간이 걸릴수 있을 것이다. 이러한 부분을 개선하기 위해서 Observer를 이용해 그림 1 처럼 Recyclerview에 아이템들의 스크롤이 마치 한개의 스크롤 뷰처럼 동작하고, 다른 Type 의 View 들을 붙여도 성능상에 이슈가 거의 없다. 풀 소스 코드는 아래에서 확인 가능하다. https://git..
일반 LinearLayoutManager 같은 경우는 findFirstVisibleItemPosition() 을 이용해서 바로 아이템을 가져 올수 있는데, StaggeredGridLayoutManager은 어떻게 가져 올수 있을까? StaggeredGridLayoutManager의 findFirstVisibleItemPosition의 구조는 아래와 같은데 public int[] findFirstVisibleItemPositions(int[] into) { if (into == null) { into = new int[mSpanCount]; } else if (into.length < mSpanCount) { throw new IllegalArgumentException("Provided int[]'s s..
StaggeredGridLayoutManager 를 이용해서 각 항목마다 보여지는 방식을 다르게 구성하고, 마지막 카테고리는 영상처럼 Grid 뷰로 구성하였는데, 동적으로 Span 카운트를 변경하려고 해보니, ScrollListener가 동작을 하지 않았다. stackoverflow 에서 알려주는 방식은 대충 home_rv.apply { layoutManager = StaggeredGridLayoutManager(spanCount, LinearLayoutManager.VERTICAL) adapter = this@HomeViewModel.adapter } 위와 같이 layoutManager 를 바꿔 주면서 SpanCount 를 변경해주고, adapter 또한 변경해 주라는 내용이었다. 물론 이방식도 단순하..
iOS에서 Fabric Crashlytics 를 이용하기 위해서는 dSYM 파일이 필요한데, 찾는 방법은 간단하다. 먼저 https://appstoreconnect.apple.com 에 나의 앱에 들어간후 활동 내역 탭 -> 모든 빌드 -> dSYM 다운로드를 클릭하여 dSYM zip 파일을 받아. Fabric 에 그대로 첨부해 준다.
보통 RecyclerView 에서 아이템 삭제후에 notifyItemRangeRemoved() 또는 notifyItemRemoved() 을 이용해서 아이템의 삭제 여부를 통보 해주면 별다른 이상없이 잘 작동 하지만, StaggeredGridLayoutManager 에서는 각 뷰 타입별로 Span 을 달리 하기 위해 ItemDecoration 을 사용했는데, 여기서 out of index 에러가 나는 것이다. 찾아보니 아래와 같은 순서로 제거 동작을 수행하면 더 이상 에러가 나지 않았다. val index = arrayList.indexOf(item) arrayList.removeAt(index) notifyItemRemoved(index) notifyItemRangeRemoved(index, 1) 참고 ..
pm2 를 이용해서 Node.js 를 실행할때 ecosystem.config.js 파일을 셋팅한 후 셋팅값으로 실행할수 있는데 코드는 아래와 같다. module.exports = { /** * 앱 설정 */ apps: [ { name: 'APPSERVER', script: './app.js', // 앱 실행 스크립트 instances: '1', // 앱 인스턴스의 수 exec_mode: 'cluster', // 실행 모드. env: { // 환경변수. 모든 배포 환경에서 공통으로 사용한다. PORT: 3000, NODE_ENV: 'development', }, env_production: { NODE_ENV: "production", // 배포환경시 적용될 설정 지정 }, env_staging: { //..
우리가 여러 게시물을 이용해 테스트를 해보고 싶을때 일일이 데이터를 삽입 하는 일은 피곤한 작업이다. 이럴때 원하는 양만큼 더미 데이터를 넣어줄수 있는데 워크 벤치에서 아래와 같이 코드를 입력해 준다. DELIMITER $$ DROP PROCEDURE IF EXISTS procedureName$$ CREATE PROCEDURE procedureName() BEGIN DECLARE i INT DEFAULT 1; WHILE i
일단 개발중인 App 이 웹뷰 하단에 버튼이 있고, 하단에 버튼을 누를시 자바 스크트 함수를 호출해서 input box 를 띄우는 작업을 하는데, 이상하게 input box 가 화면에 보여 진 상태 인데도 키보드가 나타나질 않았다. 그래서 focus() 대신 click() 도 호출해보고 iOS 쪽에서 직접 focus 도 호출해보고 별에 별짓을 다했는데, 처음 한번 키보드가 뜨고 다음 호출부터는 키보드가 뜨지 않는 문제가 있었다. 이문제의 해결코드는 다음과 같다. 아래 코드는 한줄이라도 빠지면 동작하지 않는다. 꼭 순서를 지켜 사용하기를 바란다. 해당 해결방법이 검색을 아무리 해도 안되서 고생을 했다. 다른 사람은 고생하지 말기를.... UIApplication.shared.sendAction(#selec..