2010-04-17 2 views
4

처음으로 NSDate를 하위 클래스로 만들려고 2 가지 방법을 사용했습니다. 괜찮아요,하지만 런타임에 내가 그것에 액세스하려고하면 오류가 발생합니다. 내가 오류어떻게 NSDate를 서브 클래스화할 수 있습니까?

-[NSDate initWithTimeIntervalSinceReferenceDate:]: method only defined for 
abstract class. Define -[myNSDate initWithTimeIntervalSinceReferenceDate:]! 

다른 무엇을 얻을

[myNSDate date]; 

:

내가 그냥 하위 클래스에서 수정되지 현재 날짜를 원하는 말할 수 있습니다?

답변

7

NSD의 답변 corect, 나는 단지 간단한 말로 반복하려고 노력할 것입니다. NSDate은 간단한 클래스가 아니기 때문에 쉽게 하위 클래스로 만들 수 있습니다. class cluster입니다. 즉, NSDate 유형의 값을 얻으면 실제로는 NSDate과 같은 인터페이스를 가진 다른 개인 클래스의 인스턴스입니다. 즉, NSDate은 하위 클래스로 만들려는 것이 아닙니다.

그냥 방법 (안 인스턴스 변수)를 추가하려면

, 당신은 쉽게 카테고리를 사용하는 것을 수행 할 수 있습니다

@interface NSDate (MyExtensions) 
- (void) doFoo; 
@end 

@implementation NSDate (MyExtensions) 
- (void) doFoo { 
    NSLog(@"Foo"); 
} 
@end 

이제 [date doFoo]를 호출 할 수 있습니다. Mike Ash의 class cluster subclassing tutorial도 참조하십시오.

+0

안녕 Zoul, 귀하의 설명과 URL을 주셔서 감사합니다. 아직 범주를 건너 오지 않았습니다. 그것이 얼마나 단순 할 수 있는가 :) – iFloh

1

NSDate는 클래스 클러스터이므로 NSDate는 해당 메서드가 반환하는 기본 형식에 대해 가정하지 말고 수행중인 작업을 정확히 알지 못하면 서브 클래 싱을 시도해서는 안됩니다. 그것을 확장하고 싶다면, 카테고리와 함께하십시오.

+0

안녕하세요. NSD, 응답 내용을 이해하지 못합니다. – iFloh

+0

다소 가혹하지만 사실은 사실입니다. Objective-C의 카테고리에 대해 읽어보십시오. 그들은 아마도 당신의 문제를 해결할 것입니다. – zoul

관련 문제