2010-06-08 2 views
2

ASIHTTPRequest 클래스를 사용하여 json 결과 세트를 얻으려면 서버에 비동기 호출을 할 수있는 "BSjax"클래스가 있습니다. BSjax 클래스 내 서버의 JSON 응답을 구문 분석,이 호출을 통해 호출 뷰 컨트롤러로 다시 제어를 전달 그래서 그것을 설정 :objective-c 선택기를 통한 콜백

[[self delegate] performSelectorOnMainThread:@selector(bsRequestFinished:) withObject:self waitUntilDone:YES]; 

... "bsRequestFinished"호출보기에서 콜백 방법 제어 장치. 어떤 페이지가 다른 유형의 요청을해야 할 필요가 있음을 깨달을 때까지이 모든 것이 잘 작동했습니다. 요청의 유형에 따라 해당 콜백 함수에서 여러 가지 유형의 작업을 수행하려고합니다.

내게는 내 BSjax 클래스에 다른 콜백 함수 이름을 전달할 수있는 것처럼 보이지만 가장 정교한 수정이 될 수 있습니다 ...하지만 문제가 있습니다 (가능하다면 확실하지 않습니다) 변수를 전달해야합니다. 즉, 콜백 함수의 이름을 보유하고이 같은 뭔가 위의 호출을 대체 : 그것은 새로운 요청을 만들기 위해 BSjax를 호출 할 때 "self.variableCallbackFunctionName는"호출 뷰 컨트롤러에 의해 설정된다

[[self delegate] performSelectorOnMainThread:@selector(self.variableCallbackFunctionName) withObject:self waitUntilDone:YES]; 

....

이것도 가능합니까? 그렇다면 권장 할 만합니까? 그렇지 않다면 대안?

EDIT : 도착한 모든 수정 사항은이 클래스가 비동기 요청을한다는 사실을 고려해야하므로 콜백 함수 처리가 특정 요청에 올바르게 연결되어 있는지 확인해야합니다. .. FIFO 처리 순서에 의존 할 수 없기 때문에.

편집 2 : SEL 유형 변수를 전달하는 것처럼 보이는 것이 좋습니다. 지금 내가 싸우고있는 것은 BSjax 클래스의 유지 된 속성으로 저장하는 구문을 알아내는 것입니다.

답변

2

어떤 유형의 변수는 variBkecallbackfunctionname입니까? NSString? 그렇다면 다음과 같은 것을 원할 것입니다.

[[self delegate] performSelectorOnMainThread:NSSelectorFromString(self.variableCallbackFunctionName) withObject:self waitUntilDone:YES]; 

나는 iPad에서 테스트 중이므로 시도 할 수 없습니다.

편집 : variableCallbackFunctionName이 nsstring이 아닌 경우 가장 쉬운 방법은 질문을 이해하는 것입니다.

편집 2 : 문서는 대한 http://developer.apple.com/mac/library/iPad/index.html#documentation/cocoa/Reference/Foundation/Miscellaneous/Foundation_Functions/Reference/reference.html%23//apple_ref/c/func/NSSelectorFromString

+0

좋은 ... U 사람! NSSelectorFromString 함수에 대해서도 몰랐습니다. 완벽하게 일했습니다! – codemonkey

3

에서 당신은 SEL 값으로 선택기 주위를 전달할 수 있습니다. 예를 들어 :

SEL oneSelector = @selector(bsRequestFinished:); 
SEL anotherselector = @selector(somethingElse:); 
NSString *nameOfSelector = askUserForSelectorName(); 
SEL dynamicSelector = NSSelectorFromString(nameOfSelector); 

그래서 당신의 variableCallbackFunctionName SEL을하고 그것은 당신이 기대 한 것보다 훨씬 간단 :

[[self delegate] performSelectorOnMainThread:self.variableCallbackFunctionName withObject:self waitUntilDone:YES]; 
관련 문제