2010-06-14 2 views
0

다음과 같이 내가있는 NSInvocation을 사용하고 있습니다 :있는 NSInvocation 만드는 응용 프로그램 충돌

SEL mySelector; 
mySelector = @selector(initParsersetId:type:); 

NSMethodSignature * sig = nil; 
sig = [[self class] instanceMethodSignatureForSelector:mySelector]; 

myInvocation = nil; 
myInvocation = [NSInvocation invocationWithMethodSignature:sig]; 
[myInvocation setTarget:self]; 
[myInvocation setSelector:mySelector]; 

내가 이런 식으로 전화 해요 : :

내 초기화에서

, 내가있는 viewDidLoad이 쓰고 있어요

Idea *tempIdea = [[Idea alloc]init]; 
tempIdea = [genericArray objectAtIndex:indexPath.row]; 
idea.ideaId = tempIdea.ideaId; 
[tempIdea release]; 

NSNumber *_id_ = [NSNumber numberWithInt:idea.ideaId]; 
[myInvocation setArgument:_id_ atIndex:2]; //CRASHING AT THIS LINE 

내 응용 프로그램이 표시된 줄에서 충돌하고 있습니다. 아무도 도와주지 못하니?

답변

0

코드에서 분명하지 않습니다. 그러나 나는 의심스러운 것을 본다. 다행히 도움이되는 힌트를 제공 할 수 있기를 바랍니다.

먼저 인스턴스를 유지하는 것을 볼 수 없습니다 ([NSInvocation ...]에서 자동으로 릴리스 됨). [NSInvocation ...]의 인스턴스가 자동으로 릴리스되므로 클래스 레벨 변수 myInvocation은 viewDidLoad 이벤트 이후에이를 유지하지 않습니다.

코드에서 두 번째 것은 선택기가 init로 시작하는 사용자 정의 된 생성자 종류라는 것입니다. 동일한 인스턴스 내에서 이벤트를 호출 할 수 있는지 확실하지 않습니다. 또 다른 요점은 호출 될 init ... 메소드가 self를 반환한다면? 그것은해야한다.

NSLog 기능을 사용하여 선택자 이벤트에서 일부 메시지를 출력 할 수 있습니다. NSLog의 모든 메시지는 XCode의 출력 콘솔에 있습니다.

+0

고맙습니다. David .. 도움이 .. – neha

0

답변을 찾았지만 확신이 안납니다. 사실 처음에는 viewDidLoad에 모든 초기화 코드를 작성하고 NSInvocation이 가변 객체이므로 다른 인수를 전달하여 NSInvocation 객체를 다시 사용했습니다. 그것은 작동하지 않았다. 그런 다음 모든 초기화 코드가 포함 된 메서드를 작성하고 NSInvocation 개체를 사용할 때마다이 메서드를 호출했습니다. ...

0

당신은 setArgument을 줄 필요가 : 당신이 전달하는 인수의 주소, 그리고 인수 자체 :

[myInvocation setArgument:&_id_ atIndex:2]; 

또한 NOT

[myInvocation setArgument:_id_ atIndex:2]; 

를 확실 함수가의 NSNumber 소요됩니다 첫 번째 주장으로?