Objective c 为什么此NSInvocation会引发异常?

Objective c 为什么此NSInvocation会引发异常?,objective-c,exception,nstimer,nsinvocation,method-signature,Objective C,Exception,Nstimer,Nsinvocation,Method Signature,我现在很头疼。因此,一个NSTimer对象、一个NSMethodSignature对象和一个NSInvocation对象进入一个条。下面是笑话的其余部分: NSMethodSignature *methodSig = [NSMethodSignature methodSignatureForSelector:@selector(setAlphaValue:)]; NSInvocation *inv = [NSInvocation invocationWithMethodSignature:met

我现在很头疼。因此,一个
NSTimer
对象、一个
NSMethodSignature
对象和一个
NSInvocation
对象进入一个条。下面是笑话的其余部分:

NSMethodSignature *methodSig = [NSMethodSignature methodSignatureForSelector:@selector(setAlphaValue:)];
NSInvocation *inv = [NSInvocation invocationWithMethodSignature:methodSig];
CGFloat alphaVal = 1.f;

[inv setSelector:@selector(setAlphaValue:)];
[inv setTarget:tabViewItem.view];
[inv setArgument:&alphaVal atIndex:2];

NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:0.5f invocation:inv repeats:NO];
以下是我在调试控制台中得到的信息:

+[NSInvocation _invocationWithMethodSignature:frame:]: method signature argument cannot be nil +[NSInvocation\u invocationWithMethodSignature:frame::方法签名参数不能为零
编辑:我不知道为什么有人认为有必要否决我的问题。很抱歉尝试学习一些新东西。事实上,我的原始问题有一个修正案:我应该做些什么不同的事情?一旦我发现了问题所在,我是否应该删除这篇文章?我试着遵守所有的堆栈溢出礼仪,我甚至花时间留下一个答案,以防它可能会帮助其他人。下一次,我应该回到我的问题并留下一个回答,比如“nvm…解决了它。thx?”还是我应该把它留在这里,不回答?我当然知道,我已经厌倦了点击链接,结果却被引向了未回复的帖子。

Oops。我抢了枪。Xcode的代码完成让我想到
methodSignatureForSelector:
NSMethodSignature
的类方法。每当我处理我通常不会经常处理的类时,我通常首先键入
[NSClassImUnfamiliarWith
,然后键入一个空格。这样做会弹出Xcode的代码完成弹出窗口,其中通常包含所有可以调用的方法。我意外地选择了一个继承的(?)
NSObject
中的方法认为它是一个类方法。我想这可能是多态性的一个例子。无论如何,我用我的对象替换了
NSMethodSignature
,从而解决了我的问题:
tabViewItem.view
。因此,它看起来是这样的:

NSMethodSignature *methodSig = [tabViewItem.view methodSignatureForSelector:@selector(setAlphaValue:)];

“我不知道这对任何人都有帮助,但是,老天,我要把它寄出去,以防万一。祝你好运!

一年后这里也有同样的问题。谢谢你的帖子!”朱加尔:去年十一月我告诉自己,如果我的失败能挽救一个人在电脑上吹一个洞,我会认为这是一场胜利。p、 祝你好运!为我解决了一个坏bug。谢谢!@MichaelPatzer太棒了。很高兴听到这个消息。