Ben*_*ock 3 exception objective-c method-signature nstimer nsinvocation
我现在真的很头疼.因此,一个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];
Run Code Online (Sandbox Code Playgroud)
这是我在调试控制台中获得的内容:
+[NSInvocation _invocationWithMethodSignature:frame:]: method signature argument cannot be nil
编辑:我不确定为什么有人认为有必要对我的问题进行投票.很抱歉试图学习新东西.实际上,这是对我原来问题的修正:我应该采取哪些不同的做法?一旦我弄清楚我的问题是什么,我应该刚刚删除了帖子吗?我试图遵循所有的Stack Overflow礼仪,我甚至花时间给出一个可以帮助别人的机会.下一次,我应该回到我的问题并留下一个回应,比如"nvm ......想通了.你好吗?" 或者我应该把它留在这里,没有答案?我肯定知道我已经厌倦了点击链接只能导致无人接听的帖子.
哎呀.我跳了枪.Xcode的代码完成让我觉得这methodSignatureForSelector:是一种类的方法NSMethodSignature.每当我处理课程时,我通常不会经常搞乱,我通常先打字[NSClassImUnfamiliarWith,然后是空格.这样做会调出Xcode的代码完成弹出窗口,它通常具有可以调用的所有方法.我不小心选择了一个继承(?)方法,NSObject认为它是一个类方法.我想这将是多态性的一个例子.无论如何,我通过替换NSMethodSignature我的对象解决了我的问题:tabViewItem.view.所以它们一起看起来像这样:
NSMethodSignature *methodSig = [tabViewItem.view methodSignatureForSelector:@selector(setAlphaValue:)];
Run Code Online (Sandbox Code Playgroud)
我不知道这是否会对其他人有所帮助,但通过高兴,我会发布这个以防万一.祝好运!