2010-06-14 2 views
0

Я использую NSInvocation следующим образом:NSInvocation делает приложение аварии

В моей инициализации, я пишу это в моем viewDidLoad:

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]; 

И я звоню это так:

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

Thanx David .. Это помогло .. – neha

0

Я нашел ответ, но я не уверен, как это сделать. Фактически, изначально я писал весь код инициализации в viewDidLoad и просто повторно использовал объект NSInvocation, передав ему другой аргумент, поскольку NSInvocation является изменяемым объектом. Это не сработало. Затем я написал метод со всем кодом инициализации внутри него и назвал этот метод каждый раз, когда я использовал объект NSInvocation, и он работал ...

0

Вы должны дать setArgument: адрес аргумента вы передаете, а не сам аргумент:

[myInvocation setArgument:&_id_ atIndex:2]; 

НЕ

[myInvocation setArgument:_id_ atIndex:2]; 

Кроме того, вы уверены, что ваша функция принимает NSNumber как первый аргумент?

Смежные вопросы