3

我现在真的很头疼。所以,一个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 ......想通了。thx”之类的回答?还是我应该把它留在这里,无人回答?我肯定知道我已经厌倦了点击链接却被引导到未答复的帖子。

4

1 回答 1

8

哎呀。我开枪了。Xcode 的代码完成让我认为这methodSignatureForSelector:NSMethodSignature. 每当我处理我通常不经常搞砸的课程时,我通常以键入开始[NSClassImUnfamiliarWith,然后是一个空格。这样做会打开 Xcode 的代码完成弹出窗口,它通常包含所有可以调用的方法。我不小心选择了一个继承的(?)方法,因为我NSObject认为它是一个类方法。我想这将是多态性的一个例子。无论如何,我通过替换NSMethodSignature我的对象解决了我的问题:tabViewItem.view. 所以总的来说它看起来像这样:

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

我不知道这是否对其他人有帮助,但天哪,我会发布这个以防万一。祝你好运!

于 2013-11-18T03:31:14.557 回答