(Cocoa) 날짜와 시간을 다루기

updated

Swift를 사용해서 Date를 다루는 방법은 새로 작성된 글을 참고하세요.

 

들어가며

날짜와 시간을 위한 프로그래밍을 위해서는 기본적으로 NSDate를 사용한다. NSDate는 2001년 1월 1일 자정을 기점으로 현재시간 (혹은 특정 시점)까지의 초단위로 경과한 시간을 저장하고 있는 객체이다.(Epoch가 아니라 21세기의 시작시점을 기준으로 하고 있다!) 이렇게 단순히 누적된 초 시간으로는 두 시점의 선/후 관계를 파악하는 등의 단순 비교 작업은 가능하지만, 구체적인 날짜나 요일에 연관된 작업을 하기는 매우 어렵다. 예를 들어 올해 크리스마스가 무슨 요일인지를 구하는 일은 NSDate 객체 만으로는 사실상 매우 힘들다.

(Cocoa) 날짜와 시간을 다루기 더보기

20120103 :: [팁] 프로토타입 셀을 서브클래싱하기

프로토타입 셀에 라벨 등의 서브 뷰를 삽입하면 각각의 서브뷰에 tag 값을 주어 -viewWithTag: 메소드를 통해 접근이 가능하다. 하지만 태그를 일일이 외우는 것은 직관적이지 못하므로 (물론 편리하긴하지만) 셀의 하위 구조가 복잡한 경우에는 그닥 즐겨 쓸만한 일이 아니다. 이를 아울렛을 통해 접근하고 제어할 수 있다면 좀 더 편리할 것이다.

이런 경우에는 프로토타입 셀을 서브 클래싱할 수 있다. 즉 UITableViewCell 클래스의 하위 클래스를 만들고 이를 IB에서 명시해주면 된다. 먼저 스토리보드에서 테이블 뷰 안에 있는 프로토타입 셀에 이것 저것 넣고 싶은 레이블이나 이미지뷰등을 넣는다.

원하는 서브 뷰에 대해서는 아울렛 이름을 생각해 본 다음, 다음과 같이 클래스를 하나 추가한다.

//SampleCell.h

@interface SampleCell : UITableViewCell

@property (nonatomic, strong) IBOutlet UILabel *nameLabel;
@property (nonatomic, strong) IBOutlet UILabel *gameLabel;
@property (nonatomic, strong) IBOutlet UIImageView *ratingImageView;
@end

//SampleCell.m

#import “SampleCell.h”
@implemetation SampleCell
@synthesize nameLabel, gameLabel, ratingImageView;
@end

스토리보드(혹은 xib)에서 프로토타입 셀을 선택해 클래스 속성을 SampleCell로 변경한다. 왼쪽 객체 트리구조 리스트에서 셀의 각 하위뷰로 드래그하여 아울렛을 연결해준다. 이 작업이 완료되면 테이블 뷰는 reuse identifier에 대해 sampleCell 의 인스턴스를 반환하게 된다. (이 때, 중요한 것은 테이블뷰 셀에 아울렛을 끌어와야 한다는 점이다. 테이블 뷰나 뷰 컨트롤러에 이를 끌어와서는 곤란하다!!!)

프로토타입 셀의 클래스 이름과 Reuse Identifier 간에는 어떤 상관 관계도 없으므로 같은 이름을 주지 않아도 상관없다.