2010-05-03 2 views
0

:자체 정의 된 init 메소드의 문제점은 무엇입니까? 를 ClassA에서

ClassB가에서
- (ClassA *)initWithID:(NSString *) cID andTitle:(NSString *) cTitle { 
    ClassAID = cID; 
    ClassATitle = cTitle; 
    return self; 
}

: 잘못된

- (void)cellDidSelected { 
    ClassA *classAController = [[ClassA alloc] init]; 
//Program received signal: “EXC_BAD_ACCESS” when executing the following line. 
    classAController = [classAController initWithClassAID:ClassAID andClassATitle:ClassATitle]; 
    NSLog(@"I want to get the value of ID:%@ and Title:%@ here.", [classAController ClassATitle], [classAController ClassAID]) 
}

수있는 사람이 포인트? 고마워요.

+0

'ClassA'는 어떻게 정의됩니까? 그것은 어떤 유형의 서브 클래스 (speicifically'init' 루틴을 가진 것)입니까? – fbrereto

+0

'@interface ClassA : UIViewController {...}' –

답변

1

하여 사용해보십시오

ClassA * classA = [[ClassA alloc] initWithID:anID andTitle:aTitle]; 

그리고 나는 그들이 이미하지 않은 경우 속성으로 ClassAIDClassATitle을 가지고 추천 할 것, 그리고 그들이 경우 다음을 사용해야합니다 :

[self setClassAID:cID]; 
[self setClassATitle:cTitle]; 

그런 식으로 유지됩니다. prope rly.

+0

이 해결책은 [[ClassA alloc] init] 행의 제거에 대해서도 언급해야하지만, 지금까지 사용 가능한 것 중에서 가장 좋습니다. – fbrereto

+0

아직 나에게 도움이 안된다 .../_ \, 고마워. –

+0

그것은 어떻게 작동하지 않았습니까? –

0

일반적으로 위에 게시 한 상황을 위해 설계 한 구조는 [super init] 내에서 initWithID이라는 호출을 포함하므로 객체 당 인스턴스화라는 하나의루틴 만 가질 수 있습니다. 그러나 나는 당신이보고있는 문제의 근본 원인 인 것을 보지 못합니다.

- (id)initWithID:(NSString*) cID andTitle:(NSString*) cTitle { 

    if (!(self = [super init])) 
     return nil; 

    ClassAID = cID; 
    ClassATitle = cTitle; 
    return self; 
} 

는 그런 다음처럼 뭔가를 할 수 있습니다 :

+0

게시물을 볼 때 다시 시도해 보았지만 실패했습니다. classAController를 초기화하고 매개 변수로 전달했습니다. [super init]을 호출해야하는 이유는 무엇입니까? 감사. –

+0

슈퍼 객체는 객체와 함께 초기화되어야하기 때문에. – JeremyP

+0

두 답변 모두 고마워요! –

관련 문제