클래스의 배열에서 임의의 사운드를 트리거하는 버튼이 있습니다. IBAction에 의해 트리거되는 내보기 컨트롤러에 게으른 인스턴스화가 있지만 두 가지 이유로 이것이 잘못된 것으로 생각됩니다.보기 컨트롤러의 지연 인스턴스화
1) 일반적으로 L.I. in 게터 및 세터.
L.I. getter/setter에서 프로그램이 중단되고 이유를 알 수 없습니다.
2) I 뷰 컨트롤러 IBAction를 내부 지연이 실체화 을 수행하고있다.
지연 성 인스턴스화를 수행하는 올바른 방법입니까? 여기
- (IBAction)myClass:(UIButton *)sender { if (!self.myClass){ self.myClass = [[myClass alloc] init]; [self.myClass setUpMyClass]; // this method just loads sounds and some text } [self.myClass playSound]; self.myClassLabel.text = [[NSString alloc] initWithFormat:@"%@", [self.myClass someText]]; }
충돌 코드입니다 : 여기 충돌하지 않는 코드입니다
이- (myClass *)myClass
{
if (!self.myClass){
self.myClass = [[myClass alloc] init];
[self.myClass setUpMyClass]; // this method just loads sounds and some text
}
return self.myClass;
}
- (IBAction)myClass:(UIButton *)sender
{
[self.myClass playSound];
self.myClassLabel.text = [[NSString alloc] initWithFormat:@"%@", [self.myClass someText]];
}
디버거에 넣어 밖으로 많은 말을하지 않습니다하지만이 녹색 화살표가 표시됩니다.
-(myClass *) myClass {
Thread 1: EXC_BAD_ACCESS (code=2, address =0xbf7ffffc)
사용자 이름 아쿠아를 들어, 메소드 setUpMyMethod는 다음과 같습니다 : 귀하의 게터가 자신을 재귀 적으로 호출
-(void) setUpEscha{
self.eschaDialogue = [[NSArray alloc] initWithObjects:
[[NSBundle mainBundle] pathForResource:@"Sound1" ofType:@"mp3"],
[[NSBundle mainBundle] pathForResource:@"Sound1" ofType:@"mp3"],
...
nil];
self.eschaLines = [[NSArray alloc] initWithObjects:
@"String1",
@"String2",
@"...",
nil];
}
코드가 일반적으로 괜찮아 보입니다. 그러나 실제 도움이 필요하면 충돌에 대한 정확한 세부 정보로 질문을 업데이트해야합니다. 오류 및 스택 추적을 포함하십시오. – rmaddy
디버거로부터 정보를 제공하거나'setUpMyClass'에 대한 코드를 보여줄 수 있습니까? – aqua
사이드 노트 : 마지막 줄은'self.myClassLabel.text = [self.myClass someText];'이어야합니다. 이것은'[self.myClass someText]'가'NSString'을 리턴한다고 가정합니다. – rmaddy