목록Programming (41)
ㄷㅣㅆㅣ's Amusement
오늘은 간단한데 오래 전부터 objective-c를 썼던 사람이나, 6개월 미만의 사람들이 자주 하게되는 이상한(?)코딩에 대해서 포스팅한다. 1. 간단한 초기화 - NSArray, NSSet, NSDictionary를 초기화 할때에 옛날 개발자들이나, 아니면 옛날 책을 가지고 공부한 사람들은 대부분 다음과 같이 한다.1234567- (void)viewDidLoad { [super viewDidLoad]; NSArray *menuBtns = [[NSArray alloc] init]; NSSet *menuSet = [[NSSet alloc] init]; NSDictionary *menuDic = [[NSDictionary alloc] init];}Colored by Color Scriptercs 매우 맞다..
1. code block을 받는 함수 - Java/Android에서는 interface로 listener를 만들어 결과를 받는것이 일반적이지만, objective-c/iOS 에서는 코드블럭이나 델리게이트를 통해 주고받는것이 일반적이다. 다음 예제코드는 iOS 앱에서 캘린더에대한 접근 권한을 요청하는 함수이다. 캘린더 접근권한을 요청하면 사용자에게 팝업이 제공되는데, 이때에 사용자가 "확인"버튼을 누를때까지 메인 스레드가 정지해서는 안되기 때문에 코드블럭을 넘겨받아 처리하였다.123456789101112131415161718192021222324252627- (void)requestAccessToEvents:(void (^)(BOOL bGranted))complete { BOOL needsToRequest..
iOS에서 캘린더에 접근하는 방법. 1. header - @import EventKit; 2. Getting Permission. 123456789101112131415161718192021222324- (void)requestAccessToEvents:(void (^)(BOOL bGranted))complete { BOOL needsToRequestAccessToEventStore = NO; EKAuthorizationStatus authorizationStatus = EKAuthorizationStatusAuthorized; if ([[EKEventStore class] respondsToSelector:@selector(authorizationStatusForEntityType:)]) { autho..
안드로이드 개발할때 제일 거지같은게 소프트 키보드를 강제로 닫거나 열거나 하는 동선이 있는 것인데, 구글에서도 이런짓은 좋지 않다고 경고한 바 있고, 굳이 필요도 없는데도 강제로 열고 닫고 해달라는 기획서가 올때가 있다. 프로젝트에서 가장 밑바닥에 위치한 개발자는 그냥 닥치고 구현해주는 수밖에 없는데... // 소프트인풋 보여줄 때...12345678910public void showSoftInput() { if(mSearchText == null) return; mSearchText.postDelayed(new Runnable() { public void run() { InputMethodManager manager = (InputMethodManager)mContext.getSystemService(..
안드로이드에서 SeekBar사용할 때 Thumb크기를 xml에서 조절하지 못해서 빡치는데... 열을 좀 식히고 다음 코드를 참조해서 바꿔보자 ㅋㅋㅋ 123456789101112131415ViewTreeObserver vto = mySeekBar.getViewTreeObserver();vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { public boolean onPreDraw() { Resources res = getResources(); Drawable thumb = res.getDrawable(R.drawable.thumb); int h = mySeekBar.getMeasuredHeight() * 1.5; // 8 * 1.5 = ..
그 어디에도 나와있지 않아서 빡친 내가 분석하고 만다 제길. #summary 코드리뷰-ComposeMessageAcitivity = Introduction = ComposeMessageAcitivity 클래스 설명. = onCreate() = compose_message_activity.xml 에서 ui 정보 읽어옴.(setContentView() 로 inflate) *initResourceRefs()* -> findViewById() 로 UI component 인스턴스 가져오고 listener 등록. BackgroundQueryHandler 생성. initAcitivityState() 처음 시작하는 경우, 들어온 intent의 정보를 해석하여 저장함. RecipientList.from() 이용하여 수신..
Activity에서 onCreateView()가 끝나기 전에 프레그먼트를 만들고 그 안에서 getActivity()를 하면?? - context는 null이된다. 그리고 fragment 안에서 asynctask같은거 써서 메인 쓰레드에서 다른 쓰레드로 갔다오면 무조건 getActivity()가 null인지 체크해야 함.
[자바] String을 URL 인코딩하기 (인코딩 자동으로 안 해주는 I/F사용하면 FC나고 난리버거지 ㅡㅡ;;) URL 뒤에 데이터를 덧붙이고자 할때 스트링을 URL에 맞게 인코딩을 해야하는데 아래와 같이 하면 된다. String encodeResult = URLEncoder.encode(String encodingString, String charsetName); 그냥 URLEncoder.encode(String s); 는 deprecated 되었으니까 사용하지 말고 위의 함수를 사용하자. charsetName에는 "UTF-8"과 같은 캐릭터 인코딩 셋을 넣으면 된다. 반대로 디코딩하는 것은 아래와 같이 하면 된다. String decodeResult = URLDecoder.decode(String ..
Objective-c에서... Category라는 개념이 나오는데, 이건 뭐... 라자냐 코드가 되는 것을 방지해주기 위해서 매우 중요한 메카니즘인거는 다 알겠고... 아무도 얘기해주지 않아 직접 해봐야만 하는 것중에... 이때에도 오버라이딩이 되는가?? 임. 단순 호기심에 시도해봤는데... 잘됨 ㅋㅋㅋ 그런데... 상속과 다르게 카테고리는... 원본 클래스에 덮어씌우는 개념이기 때문에 이렇게하면 대략 좋지가 않다. 프로젝트 전체에서 그 클래스가 하는동작이 서로 상이하게되면... 이건 스파게티나 라자냐 코드보다 더 큰 문제가 야기될 수 있기 때문. 물론 아무리 그렇다고 해도 꼭 써야할 때는 써야지!! 하지만 정당한 이유 없이 쓰면 코드리뷰하다가 귓방맹이 맞을수도 있으니 주의!! 또 주의하자.
NSSet이나 NSMutableSet을 이용하면... 당연히 중복이 없어져야한다... 집합이니까... 그런데!! 신경써서 override하지 않으면 중복이 생길수가 있음... 아오... 이거 맨날 빼먹고 하다가 디버깅 한시간씩 잡아먹고 그러지.. isEqual함수만 오버라이드하면 되는줄 알았게찌? 근데 디버깅하면 일일이 다 비교하지 않아서 이게 뭥미;; 하고 한시간씩 정신과 시간의 방에 갇히게 됨. - (BOOL)isEqual:(id)other { // TODO : 중복체크 로직 } 아직도 무슨말인지 잘 모르겠는 사람 있을게야... 당신이 빠뜨린 한가지... function hash override - (NSUInteger)hash { return [[self cardName] hash]; } 이거 안해..