我现在真的很头疼。于是,一个 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:]: 方法签名参数不能为 nil
编辑:我不确定为什么有人认为有必要对我的问题投反对票。很抱歉尝试学习新东西。实际上,这是对我原来问题的修正:我应该怎么做?一旦我弄清楚我的问题是什么,我应该删除帖子吗?我试图遵循 Stack Overflow 的所有礼节,我什至花时间留下一个答案,以防万一它可以帮助其他人。下一次,我应该回到我的问题并留下这样的回答,“nvm ......弄清楚了。谢谢?”还是我应该把它放在这里,无人回答?我肯定知道我厌倦了点击链接只会被引导到未答复的帖子。
最佳答案
哎呀。我跳了枪。 Xcode 的代码完成让我认为 methodSignatureForSelector:
是 NSMethodSignature
的类方法。每当我处理我通常不会经常弄乱的类时,我通常首先输入 [NSClassImUnfamiliarWith
,然后是一个空格。这样做会打开 Xcode 的代码完成弹出窗口,它通常包含所有可以调用的方法。我不小心从 NSObject
中选择了一个继承的 (?) 方法,认为它是一个类方法。我想这将是多态性的一个例子。无论如何,我通过用我的对象替换 NSMethodSignature
解决了我的问题: tabViewItem.view
。所以放在一起看起来像这样:
NSMethodSignature *methodSig = [tabViewItem.view methodSignatureForSelector:@selector(setAlphaValue:)];
我不知道这是否对其他人有帮助,但是天哪,我会发布这个以防万一。祝你好运!
关于objective-c - 为什么这个 NSInvocation 会引发异常?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20039600/