2011-08-02 4 views
0

kAudioSessionProperty_AudioRouteChange에 대한 오디오 세션 속성 수신기를 추가 중이며 콜백에서 UIImagePickerController의 takePicture 함수를 호출하려고합니다. 문제는 콜백에서 내 선택기에 액세스 할 수 없다는 것입니다.Objective C 객체가 C 함수에서 인식되지 않습니다.

viewDidLoad에서 내 선택 도구를 초기화하고 있습니다. 피커를 private 및 public 개체로 선언하고 picker 또는 self.picker로 액세스하려고 시도했지만 항상 "선언되지 않은 식별자 사용"오류를 제공합니다. 뿐 배열이 같은 준다 나는 또한이 UIImagePickerController를의 문제였다 경우 NSArray를보고 선언

void applicationVolumeDidChange(void *inClientData, 
           AudioSessionPropertyID inID, 
           UInt32 inDataSize, const void *inData) 
{ 
    NSLog(@"Volume changed"); 
    //[picker takePicture]; Error 

} 

: 이것은 내 콜백입니다

AudioSessionInitialize(nil, nil, nil, nil); 
AudioSessionSetActive(true); 
AudioSessionAddPropertyListener(
           kAudioSessionProperty_AudioRouteChange, 
           applicationAudioRouteDidChange, 
           self); 

: 나는 청취자를 추가하려면이 코드를 사용 오류.

답변

2

AudioSessionAddPropertyListener()의 마지막 매개 변수가 있으므로 콜백에 원하는대로 전달할 수 있습니다.

OSStatus AudioSessionAddPropertyListener (
     AudioSessionPropertyID   inID, 
     AudioSessionPropertyListener inProc, 
     void       *inClientData 
    ); 

당신은 콜백 이내에 자기를 전달하는 void *inClientData 매개 변수는가 자기 객체에 중 포인터입니다.

자체는 UIImagePickerController를 인스턴스,

UIImagePickerController *picker = inClientData; 
[picker takePicture]; 
+0

자기가 내보기 컨트롤러 그래서 제 경우에는'UIImagePickerController * myPicker = (RootViewController *) inClientData.picker; '를 사용합니다. 귀하의 방향은 정확합니다. –

1

콜백은 Objective-C 메소드가 아닌 C 함수 여야합니다. 이들은 호환되지 않습니다. this link을 참조하십시오.

+0

내 콜백이 그 함수에서 객관적 C 개체에 액세스하려고 C 함수, 메신저입니다했다합니다. 대답하기 전에주의 깊게 읽으십시오. –

+0

흠 ... 나는 그곳에서 방법을 보았습니다. 죄송합니다. 따라서 사실상 범위 문제가 있습니다. 당신이 지나가고있는 "자아"는 무엇입니까? –

+0

문제 해결 .... 허용 된 답변을 살펴보십시오. '자체'는 viewcontroller 클래스입니다 –

관련 문제