2013-07-30 3 views
0

나는 분명 할 수도있는 것을 알아 내려고 노력해 왔으며 요점을 놓치거나 잃어 버렸습니다. 내 toggleStormButtons 함수에 문제가있어 Xcode가 그것을보고 있지 않습니다?인식 할 수없는 셀렉터가 다른 클래스의 인스턴스로 전송되었습니다.

- (void)toggleStormButtons{ 
    [UIButton animateWithDuration:0.50 animations:^{ 
     if (stormToggleBtn.transform.tx == 0){ 
      [stormToggleBtn setTransform:CGAffineTransformMakeTranslation(307, 0)]; 
      UIImage* hideButtonImg = [UIImage imageNamed:@"aiga_right_arrow_mod_hide_resize.png"]; 
      [stormToggleBtn setBackgroundImage:hideButtonImg forState:UIControlStateNormal]; 
     } 
     else{ 
      [stormToggleBtn setTransform:CGAffineTransformMakeTranslation(0, 0)]; 
      UIImage* showButtonImg = [UIImage imageNamed:@"aiga_right_arrow_mod_show_resize.png"]; 
      [stormToggleBtn setBackgroundImage:showButtonImg forState:UIControlStateNormal]; 
     } 
    }]; 

    for(UIView* storm in stormButtonSaves){ 
     [UIView animateWithDuration:0.50 animations:^{ 
      if (storm.transform.tx == 0){ 
       [storm setTransform:CGAffineTransformMakeTranslation(307, 0)]; 
       storm.alpha = .65; 
      } 
      else{ 
       [storm setTransform:CGAffineTransformMakeTranslation(0, 0)]; 
       storm.alpha = 0; 
      } 
     }]; 
    } 
} 

- (void)drawStormToggleButton{ 
    //Storm Pullout Toggle Button 
    UIImage *buttonImageNormal = [UIImage imageNamed:@"aiga_right_arrow_mod_show_resize.png"]; 
    stormToggleBtn = [[UIButton alloc] initWithFrame:CGRectMake(10, 10, 65, 75) ]; 
    [stormToggleBtn setBackgroundImage:buttonImageNormal forState:UIControlStateNormal]; 
    stormToggleBtn.backgroundColor = [UIColor clearColor]; 
    stormToggleBtn.alpha = 0.5; 
    [stormToggleBtn addTarget:self action:@selector(toggleStormButtons) forControlEvents:UIControlEventTouchUpInside]; 
    [viewsToRemove addObject:stormToggleBtn]; 
    [mv addSubview:stormToggleBtn]; 
} 

은 내가를 받고있는 것으로 보인다 :

STopLeftMenu *mTopLeft = [[STopLeftMenu alloc]init];  
[mTopLeft drawStormToggleButton]; 

그런 다음 다른 클래스에서 내가 2 개 기능을 가지고 : 내 메인 클래스에서

는 내가 다른 클래스의 함수를 호출하려면 다음 한 인식 할 수없는 선택자 메시지 :

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSMallocBlock__ toggleStormButtons]: unrecognized selector sent to instance 0x7bc9ca0' 
*** First throw call stack: 
(0x1b9e012 0x1966e7e 0x1c294bd 0x1b8dbbc 0x1b8d94e 0x197a705 0x8ae2c0 0x8ae258 0x96f021 0x96f57f 0x96e6e8 0x8ddcef 0x8ddf02 0x8bbd4a 0x8ad698 0x2599df9 0x2599ad0 0x1b13bf5 0x1b13962 0x1b44bb6 0x1b43f44 0x1b43e1b 0x25987e3 0x2598668 0x8aaffc 0x2285 0x2185) 
libc++abi.dylib: terminate called throwing an exception 

답변

2

STopLeftMenu가 너무 일찍 할당 해제되는 것 같습니다. 버튼은 대상을 유지하지 않으므로 버튼의 메시지에 응답해야하는 한이 객체를 유지해야합니다. 개체 할당 해제 방법을 잘 모르는 경우 debugging with Instruments을 시도하십시오.

+0

STPLeftMenu가 ARC에서 너무 일찍 릴리스되었으며 속성에 클래스를 유지하는 것이이 문제를 해결하는 것으로 보이는 문제를 해결 한 것 같습니다. 감사 –

1

표시 한 코드에 아무런 이상이 없습니다. 기존 응용 프로그램에서 시도해 보았고 UIButton 로컬 변수를 선언하고 버튼을 사용하는 이미지를 변경하고 toggleStormButtons의 주석을 달고 메서드를 호출 할 때마다 메서드를 호출해야했습니다. 버튼, 문제 없음.

버튼에 저장 용량을 표시하지 않습니다. ARC를 사용하고 있습니까? strong 버튼입니까? ARC라면 강해야합니다. ARC가 아니며 retain으로 할당 할 속성을 사용하지 않는 경우 문제가 발생할 수 있습니다. viewsToRemove의 기능은 무엇입니까? 배열처럼 보이지만 뭔가 다른 것일 수 있습니다.

+ buttonWithType:을 사용하고 프레임을 나중에 설정하는 이유는 무엇입니까?

+0

예 viewsToRemove는 배열이지만 문제는 발생하지 않았습니다. Xcode에서 내 ToggleStormsButtons 선택기가 보이지 않는 경우가 있습니다. 예 ARC를 사용 중이며 버튼이 강하지 않습니다. 또한 전체 toggleStormsButtons 선택자 코드를 주석 처리하려고 시도했지만 인식 할 수없는 선택기 문제가 여전히 발생합니다. –

+0

당신의 버튼이 강해야한다고 생각합니다. 나는 그것이 하위 뷰로 추가 된 것을 본다.하지만 나는 mv가 무엇인지 모른다. –

관련 문제