2012-02-29 3 views
0

나는 방법캐스트 개체

[self performSelectorOnMainThread:@selector(uploadDidEnd:) withObject:foo 
     waitUntilDone:YES] 

를 사용하는 경우 - (무효) uploadDidEnd (ID) 보낸 사람

보낸 사람이 대상인가? foo는 사용자 정의 클래스입니다. 내 보낸 사람을 내 개체로 변환하려면 어떻게해야합니까?

나는 캐스팅하기 위해 노력하고있어하지만 난 통지에

'-[_NSThreadPerformInfo CountY]: unrecognized selector sent to instance 0x52bbd0' 

가 있어요, 나는 개체의 속성이 NSNotification 및 알림에 보낸 사람의 캐스트를 사용하지만, NSThread 내가 발견하지 않았다.

감사합니다.

답변

2

당신이 생각할 수의 일종으로

[self performSelectorOnMainThread:@selector(uploadDidEnd:) 
     withObject:foo 
     waitUntilDone:YES] 

동일하게 :

[self uploadDidEnd:foo]; 

그건 당신이 뭘하려는 건지 확신을 있습니까?

그렇다면 : 당신의 uploadDidEnd: 구현 내부에, 당신이 정말 그렇게처럼 어떤 객체 유형에 foo에 캐스팅 할 수 있습니다

- (void)uploadDidEnd:(id)sender 
{ 
    FooClass *foo = (FooClass *)sender; 
    [foo doSomething]; // or whatever 
} 
2
  1. sender으로 선언 된 인수는 메서드에 전달되는 유일한 매개 변수입니다. performSelectorOnMainThread : withObject : waitUntilDone는 :

  2. 주조가 해결되지 않습니다 : 선택기에 withObject 수행 할 후, 그래서 그래, 여기 foo이 uploadDidEnd에 전달 될 인수를 전달합니다. Objective-C는 동적 언어이므로 캐스팅이 컴파일러 경고를 제거하더라도 객체의 실제 구현은 변경되지 않으므로 자연스럽게 메시지를 다시 보내지 않습니다.

+0

하지만 호출 방법에 전달 된 객체 foo에 걸릴 수 있습니까? – NemeSys

+0

어떻게 "가져가"시겠습니까? 그 주장에 바로 있습니다. –