2

내가 뭘하려는 건지, 각각의 UIButton에 대해 하나의 함수가 만들어지고 그 함수 내에서 스위치를 사용하여 동작을 결정합니다. 스위치를 사용하기 위해 버튼에 태그를 설정하고 있지만 실제로는 그렇게 멀리 가지 않습니다. 나는이 버튼 변수가 생성되기 때문에, 그리고 그것에 대한 언급이 없기 때문에 다음, 오토 릴리즈 있다고 생각ARC를 사용하는 동안 어떻게 UIButton을 메모리에 유지합니까?

-[WatchViewController buttonHandler]: unrecognized selector sent to instance 0x6845430

: 나는 버튼 중 하나를 클릭하면

for var(int i = 0; i < numResults; i++) 
{ 
    UIButton* button = [[UIButton] alloc] initWithFrame:CGRectMake(0,(i*55)+10,320,50)]; 
    [buttton setTag:i]; 
    [button addTarget:self action:@selector(buttonHandler) forControlEvents:UIControlEventTouchUpInside]; 
    [self.view addSubview:button]; 
} 

    ... 

-(void) buttonHandler:(id)sender 
{ 
    //Handle the button press 
} 

앱에서 오류가 발생합니다 ARC에 의해 호출되므로 함수가 호출 될 때 더 이상 존재하지 않습니다. 불행히도 저는 메모리에있는 각 버튼에 대한 참조를 유지하는 방법을 모르겠습니다.

내가 틀렸거나 (내가 작성한 내용이 불량한 실습 인 경우) 알려 주시면 언제든지 배울 수 있습니다.

답변

6

귀하의 문제는 @selector(buttonHandler)입니다. 너는 @selector(buttonHandler:)을 의미했다. 끝에 여분의 콜론이 있음을 유의하십시오. 이런 종류의 실수를 범하기 위해 "선언되지 않은 선택기"(-Wselector) 경고를 켜는 것이 좋습니다.

+0

정말 고마워요, 나는 그것이 필요하다는 것을 깨닫지 못했지만 지금은 완벽한 감각이 있다고 말해 왔습니다. 분명히 나는 ​​틀린 나무를 완전히 짖고 있었다! – mrh89

관련 문제