2012-03-06 7 views
1

IOS 프로젝트에서 스토리 보드의 단추와 새 NSObject 클래스를 연결하는 데 많은 시간을 보내고 있습니다. OS X에서 사용 된 방법은 IOS에서 더 이상 작동하지 않습니다."유효한 연결 대상"에없는 IOS IBAction에 연결

원래 UIViewController 클래스의 IBAction에 연결하는 데 문제가 없습니다. Apple의 문서에 따르면, 새로운 클래스는 "유효한 연결 대상"이 아닙니다.

문제를 해결하기 위해 UIViewController 클래스의 새 클래스에서 메서드를 호출하려고했습니다. 스택 오버플로에 대한 게시물을 사용하여 알림 및 위임 스키마를 시도했지만 작동하지 못하게했습니다. 그 방법 안에 내가 같은 클래스에서 -startPlay를 호출 할 수 없습니다에서

대상 클래스의 + 방법에 내가 연결 온 가장 가까운, 그러나 같은

+ (void) startToneGenerator 
{ 
    NSLog(@"Arrived in startToneGenerator"); 
//  [self startPlay:nil]; 
} 

. -StartPlay 클래스는 오디오 유닛 구성 요소의 일부이므로 오디오 장치를 손상시키지 않고 + starPlay 클래스로 변경할 수 없습니다.

누구든지 "유효한 연결 대상"이 무엇을 의미하는지 문서화하여 알려줄 수 있으며 시도한 연결을 유효한 연결로 만드는 방법을 설명합니다.


대답 1에서 제안 된 방법이 사용되는 OS X에서 작동하지만 IOS에서는 더 이상 작동하지 않습니다. 문제를 명확히하는 코드를 다시 말합니다.

// code in VC 

- (IBAction)RunPauseStop:(id)sender 
    {     
    NSLog(@"arrived in RunPauseSTop"); // OK 

    [uToneGenerator testMethod]; // OK     
    // [uToneGenerator startPlay:self]; // crashes 
} 


// code in uToneGenerator 

+ (void) testMethod 
{ 
NSLog(@"arrived in <testMethod>"); // OK 
// [uToneGenerator startPlay:nil]; // crashes 
} 


- (IBAction)startPlay:(id)sender 
{ 
NSLog(@"arrived in <startPlay>"); // Don't get here   
} 

[uToneGenerator startPlay : nil];

2012-03-06 13 : 20 : 25.509 이명 테이머 IP [863 : F803] + [uToneGenerator startPlay :] : 인식 할 수없는 선택기 클래스로 전송 0x6c40 2012-03-와 (경고 포함) 컴파일하지만 충돌 06 13 : 20 : 25.509 이명 테이머 IP [863 : F803] '+ [uToneGenerator startPlay :] : 미정 선택기 클래스 0x6c40 전송'에서 전화

앱 종료 * 인해 이유 'NSInvalidArgumentException'캐치되지 않는 예외 시험 방법; 컴파일 할 수 있지만 다음과 같이 충돌합니다. 2012-03-06 13 : 22 : 31.413 이명 : Tamer IP [885 : f803] + [uToneGenerator startPlay :] : 인식 할 수없는 선택자를 클래스 0x6c44로 보냄 2012-03-06 13 : 22 : 31.414 Tinnitus Tamer IP [885 : F803] : '+ [uToneGenerator startPlay :] : 인식 할 수없는 선택기 클래스 0x6c44로 전송'응용 프로그램을 종료 * 때문에, 이유는 'NSInvalidArgumentException'캐치되지 않는 예외에 내가 오류 메시지가 찾을 수 있음에 유의

+ [uToneGenerator startPlay는 :,하지만 난 전화를 시도하고있는 방법은 - [uToneGenerator startPlay :


uToneGenerator * UTG = [[uToneGenerator 알 loc] init]; 괜찮아. 컴파일러 경고에도 불구하고 "NSProject가 'startPlay'에 응답하지 않을 수 있습니다.

도와 주셔서 감사합니다. 정말로 감사드립니다.

답변

0

당신은 당신의 VC에 IBAction를 방법 안에 당신이 원하는 클래스 메서드를 호출해야합니다

- (IBAction)myButtonPressed:(id)sender { 
    [MyClass myClassMethod]; 
} 
0

당신이 +- (IBAction)startPlay:(id)sender를 선언해야 작동하는 코드를합니다.

[utg startPlay:self]; 

는 희망이 도움이 : 당신의 startPlay 메소드를 호출하는 것을 사용 후

uToneGenerator *utg = [[uToneGenerator alloc]init]; //or whatever you use 

을하고 그렇지 않으면 당신은 당신의 클래스의 인스턴스를해야 할 것이다.