Do Not Think!!!

Posted
Filed under 사진으로 기록하기

이전 사무실에서 짐을 빼면서

사용자 삽입 이미지


사용자 삽입 이미지


사용자 삽입 이미지



이사짐 옮기는 중

사용자 삽입 이미지



새 사무실 정리를 어떠게 해야 하나

사용자 삽입 이미지


사용자 삽입 이미지



새로운 사무실에서 바라본 풍경

사용자 삽입 이미지


사용자 삽입 이미지





아이폰4

Posted
Filed under 01010101

NSDate 와 코어데이터의 Dates and Times

NSDate
[CODE]The sole primitive method of NSDate, timeIntervalSinceReferenceDate, provides the basis for all the other methods in the NSDate interface. This method returns a time value relative to an absolute reference date—the first instant of 1 January 2001, GMT.[/CODE]

Core Data Dates and Times
[CODE]NSManagedObject represents date attributes using NSDate objects, and stores times internally as an NSTimeInterval value since the reference date (which has a time zone of GMT). Time zones are not explicitly stored—indeed you should always represent a Core Data date attribute in GMT, this way searches are normalized in the database. If you need to preserve the time zone information, you need to store a time zone attribute in your model. This may again require you to create a subclass of NSManagedObject.[/CODE]


Core Data 에 NSDate 를 저장하면,

2001-01-01 00:00:00 을 기준으로 한 time interval (double) 이 저장됩니다.
이 때, 기준이 되는 타임존은 Local TimeZone -> GMT 입니다.

예를 들면
한국에서 2011-11-25 11:21:02 라는 시간을 Core Data 에 저장하면
한국의 타임존 2011-11-25 11:21:02 +0900 이 아니라
GMT 2011-11-25 02:21:02 +0000 라는 시간이
1970-01-01 00:00:00 을 기준으로 한 time interval 1322187662 이 아니라, (timeIntervalSince1970)
2001-01-01 00:00:00 을 기준으로 한 time interval 343880462 가 저장됩니다. (timeIntervalSinceReferenceDate)

Core Data 에서 불러오면

2001-01-01 00:00:00 을 기준으로 한 time interval 으로 NSDate 객체를 만듦니다.
이 때, 기준이 되는 타임존은 GMT -> Local TimeZone 입니다.

예를 들면
저장된 343880462 을 한국에서 불러오면,
GMT 2011-11-25 02:21:02 +0000 라는 시간이 안니라,
한국의 타임존 2011-11-25 11:21:02 +0900 라는 시간이 만들어집니다.

하지만, 저장된 343880462 을 홍콩에서 불러오면
홍콩의 타임존 2011-11-25 10:21:02 +0800 라는 시간이 만들어집니다.


타임존을 이동하는 경우,

작성된 시간을 보여주기 위해서는
해당 타임존을 별도로 저장하고, 저장된 타임존을 이용해서 시간을 표시해야 합니다.

Posted
Filed under 01010101
어떻게 해야 이 팝업이 사라지는 걸까요?

사용자 삽입 이미지


덧: 아래쪽 이미 등록하셨나요? 를 누르면 사라진다는군요.
Posted
Filed under 01010101
버튼을 이용해서 UIPickerView 또는 UIDatePicker 를 이용하는 방법은 여러가지가 있습니다.

그 중에서 버튼을 누르면 UITextField 처럼 하단에서 커스텀 키보드가 나오도록 하는 방법입니다.

UIButton 을 상속받아서 UIResponder 의 - (BOOL)canBecomeFirstResponder 를 구현합니다.


CustomButton.h
[CODE]//
//  CustomButton.h
//
//  Created by Cho, Young-Un on 11. 9. 2..
//  Copyright 2011 cultstory.com. All rights reserved.
//

#import <UIKit/UIKit.h>


@interface CustomButton : UIButton {
@private
    UIView *_inputView;
}


@property (nonatomic, retain) UIView *inputView;

@end[/CODE]


CustomButton.m
[CODE]//
//  CustomButton.m
//
//  Created by Cho, Young-Un on 11. 9. 2..
//  Copyright 2011 cultstory.com. All rights reserved.
//

#import "CustomButton.h"


@implementation CustomButton

@synthesize inputView=_inputView;

- (void)dealloc {
    [_inputView release];
   
    [super dealloc];
}

- (BOOL)canBecomeFirstResponder {
    return YES;
}

@end[/CODE]


사용법
[CODE]UIPickerView *pickerView = [[[UIPickerView alloc] initWithFrame:CGRectMake(0, 10, 320, 216)] autorelease];
pickerView.delegate = self;
pickerView.dataSource = self;
pickerView.showsSelectionIndicator = YES;

CustomButton customButton = [[CustomButton alloc] initWithFrame:CGRectMake(10, 10, 300, 40)];
customButton.inputView = pickerView;

[button becomeFirstResponder];[/CODE]




Posted
Filed under 01010101
아이폰에서 TextField 에 포커스가 가면 자동으로 기본 키보드가 나옵니다.

이 기본 키보드 대신 UIPickerView 또는 UIDatePicker 등을 사용하고 싶을 때가 있습니다.

이 경우 iOS 3.2 부터 생긴 inputView 속성을 이용하면 간단하게 커스텀 키보드를 이용할 수 있습니다.


기본 키보드 사용

[CODE]UITextField textField = [[UITextField alloc] initWithFrame:CGRectMake(10, 10, 300, 40)];[/CODE]



기본 키보드 대신 UIDatePicker 사용

[CODE]UIPickerView *pickerView = [[[UIPickerView alloc] initWithFrame:CGRectMake(0, 10, 320, 216)] autorelease];
pickerView.delegate = self;
pickerView.dataSource = self;
pickerView.showsSelectionIndicator = YES;

UITextField textField = [[UITextField alloc] initWithFrame:CGRectMake(10, 10, 300, 40)];
inputField.inputView = pickerView;[/CODE]






Posted
Filed under 01010101
iOS 4.1 부터 아이폰 기본 키보드에 소수점을 찍을 수 있는 키패드가 추가 되었습니다.
하지만 이거 때문에 이전 버전의 아이폰 사용자가 앱을 사용할 수 없게 만들 수는 없습니다.
그래서, 아이폰 버전을 확인 해서 4.1 이후 버전의 사용자와  이전 버전의 사용자에게 다른 키보드를 보여줘야 합니다.


iOS 버전을 확인하는 매크로
[CODE]#define SYSTEM_VERSION_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedSame)
#define SYSTEM_VERSION_GREATER_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedDescending)
#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)
#define SYSTEM_VERSION_LESS_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending)
#define SYSTEM_VERSION_LESS_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedDescending)[/CODE]

매크로 사용법
[CODE]textField.keyboardType = UIKeyboardTypeNumbersAndPunctuation;
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"4.1")) {
    textField.keyboardType = UIKeyboardTypeDecimalPad;
}[/CODE]


참고: http://stackoverflow.com/questions/3339722/check-iphone-ios-version