블로그 이미지
매몰

모바일 어플리케이션 개발 1인 기업 고영진모바일입니다. 저와 함께 맛깔스러운 앱을 만들어 보아요~

Rss feed Tistory
개발/android 2018.09.27 13:30

sqlite의 time이 자정을 인식 못할 경우, 간단한 꼼수 해결법



안드로이드의 sqlite 데이터베이스를 사용하는 도중 이상한 점을 하나 발견했다.


time 데이터타입에서 00시 또는 24시, 즉 자정일때 time() 함수가 먹히질 않는다는 점이다.


예를 들면,

(time 데이터타입의 field1 시각 +  int 데이터타입의 field2 초) > 특정시각


을 비교할때


SELECT * FROM table1 WHERE time(field1, field2 ||' seconds') > 23:59:30

와 같이 사용한다.


하지만 이때, field1이 23:59:00 이고 field2가 60초 이상이면 자정이 넘어가면서 SELECT 결과가 항상 아무것도 안나오게 된다. field1이 24:00:00 이상이어도 마찬가지다.


이걸 해결하기 위해 만방으로 살펴봤지만... 역시 코딩은 꼼수가 최고다.


그냥... 자정이 넘어갈것 같으면 시간을 앞당겨주면 된다ㅎㅎ



다음과 같이 해보자~

private String getTime(String time, String addtime) {
return "time('" + time + "'" + addtime + ")";
}

private String getTime(String field, String addfield, String addtime) {
return "time(" + field + "," + addfield + "||' seconds'" + addtime + ")";
}

private Cursor fetch(SQLiteDatabase db, String time) {
//특정시각 time이 21시보다 크면 3시간을 앞당겨 준다.
String addText = Integer.parseInt(time.substring(0, 2)) < 22 ? "" : ",'-3 hours'";

return db.rawQuery("SELECT * FROM table1 WHERE " + getTime("field1", "field2", addText) + "<" + getTime(time, addText), null);
}

자정이 넘어 갔을때 시간을 앞당겨 비교해 주면 정상적으로 작동한다. 


수제앱장인


 

 

CEO

Developer

S/W Enginner

고영진


실패만 하고 있어도 꿈을 포기하지 않는 남자
제가 직접 경험하고 습득한 지식을 위주로 올릴게요



사업자 정보 표시
고영진모바일 | 고영진 | 서울특별시 관악구 낙성대동 서울대연구공원 SK상생혁신센터 | 사업자 등록번호 : 109-11-82076 | TEL : 010-9990-3674 | Mail : gyjmeba@hanmail.net | 통신판매신고번호 : 2010-서울강서-0217호 | 사이버몰의 이용약관 바로가기
개발/ios 2018.03.26 10:42

손쉽게 아이폰 앱을 새로 실행 시키는 코드 한줄



안드로이드에서는 메인 activity를 종료하고 다시 호출하면 바로 재시작이 된다.


하지만 아이폰에서는 그렇게 할수가 없었다. 혹시나 하는 마음에 재시작 시키는 함수를 찾아봤지만 이 또한 없었다. 나의 구글링 실력이 부족해서 못찾은거일수도 있지만... 좌절하고 있는 순간...


정말 우연하게 방법을 알아냈다. 사실 실수로 코드를 잘못 넣었는데... 재시작이 되는것이다... 아! 실수로 찍은 로또나 될것이지.. 어쨋든 기분은 좋다. 불로소득같은 느낌이다.



방법은 진짜 간단하다.

AppDelegate 의 applicationWillEnterForeground 에서 exit(0)를 호출해주면 된다.

아마도 잠에서 깨어나기 직전에 종료를 해주면 깨어나는 작업이 중단되지 않고 계속 진행되면서 재시작되는 효과가 나오는것 같다.


단점은 내가 원하는 시점이 아니라 앱이 깨어나는 순간에서만 적용된다는 것이다.

하지만 이는 아주 유용하게 쓰일수 있다.


iOS 특성상 앱을 완전 종료하지 않고 임시로 백그라운드로 내렸다가 다시 불려오는 경우가 많다.

(폰 아래 버튼은 종료 버튼이 아니라 홈 버튼이기 때문에)

즉, 앱이 완전 종료되고 다시 실행되어야만 하는 경우 매우 기특하게 사용될수 있다.



다음은 1시간 동안 앱이 포어그라운드로 깨어나지 않았다면 새로 실행 시키는 코드이다.

참고하여 다양하게 사용하길 바란다.



class AppDelegate: UIResponder, UIApplicationDelegate {


    let RESTART_TIME: TimeInterval = 3600

  

    var mResignTime: TimeInterval?


    func applicationWillResignActive(_ application: UIApplication) {

        mResignTime = NSDate().timeIntervalSince1970

    }


    func applicationWillEnterForeground(_ application: UIApplication) {

        if mResignTime != nil && NSDate().timeIntervalSince1970 - mResignTime! > RESTART_TIME {

            exit(0)

        }


    }

}



아이폰X와 아이폰7 (11.2)에서 테스트 해보았다. 잘 돌아간다. 굳!



 

 



수제 앱 장인: 고영진


(주)고영진모바일

1인기업 대표이사 겸 개발자

  

     실패만 하고 있어도 꿈을 포기하지 않는 남자 

     제가 직접 경험하고 습득한 지식을 위주로 올릴게요

 




사업자 정보 표시
고영진모바일 | 고영진 | 서울특별시 관악구 낙성대동 서울대연구공원 SK상생혁신센터 | 사업자 등록번호 : 109-11-82076 | TEL : 010-9990-3674 | Mail : gyjmeba@hanmail.net | 통신판매신고번호 : 2010-서울강서-0217호 | 사이버몰의 이용약관 바로가기
개발/ios 2013.08.24 15:28

아이폰용 게임을 만드는 네가지 방법

아이폰용 게임을 만들기 위해서 크게 네가지 방법을 이용할 수 있다...

UIKit, 쿼츠2D, OpenGL ES, 게임엔진이 그것이다.


UIKit은 사실 게임보다는 일반 어플을 만드는데 사용된다.

쉽게 말하면 버튼이나 레이블같은 인터페이스가 제공되어 포토샵을 하듯 화면에 붙여넣고 컨트롤러를 등록하여 사용자반응을 감지하면 된다.


아이폰은 안드로이드에서와는 틀리게 기본적으로 애니메이션효과가 강력하다. 즉 기본적인 하드웨어 가속이 비교적 빨라 복잡하지 않은 게임이라면 UIKit으로도 충분히 게임을 만들수 있다...

아이폰게임개발 관련책에는 최대 60fps로 실행되는 게임들을 위한 최고의 선택이라고 되어있다.


쿼츠2D는 ios가 기본적으로 제공해주는 그래픽엔진이다. UIKit도 내부적으로는 쿼츠2D로 되어있다고 한다.

제가 게임개발에 이용하는것이 바로 이 쿼츠2D이다. 앞으로의 ios 게임관련해서는 이것을 기반으로하여 쓰게 될것이다.


OpenGL ES는 다들 아실것이다. 굳이 설명은 안하겠다.


게임엔진은 유니티나 코코스등으로 굳이 ios나 오브젝티브-C 지식이 없어도 쉽게 만들수 있다.


처음에 아이폰용 게임을 만들려고 마음먹었을때 알아봤던 내용이었는데 혹시나 궁금해 하는분이 있을까해서 올려봐요~







 

 매몰: 고영진 대표/개발자


 고영진모바일 1인기업의 하나뿐인 사람. 

 그밖에 동반자 노트북,스마트폰 

     실패만 하고 있어도 꿈을 포기하지 않는 남자. 

     제가 직접 경험하고 습득한 지식을 위주로 올릴게요. 







 

  

사업자 정보 표시
고영진모바일 | 고영진 | 서울특별시 관악구 낙성대동 서울대연구공원 SK상생혁신센터 | 사업자 등록번호 : 109-11-82076 | TEL : 010-9990-3674 | Mail : gyjmeba@hanmail.net | 통신판매신고번호 : 2010-서울강서-0217호 | 사이버몰의 이용약관 바로가기
TOTAL 69,581 TODAY 10