【问题标题】:Why does this NSInvocation raise an exception?为什么这个 NSInvocation 会引发异常?
【发布时间】:2013-11-18 03:31:14
【问题描述】:

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

【问题讨论】:

    标签: objective-c exception nstimer nsinvocation method-signature


    【解决方案1】:

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

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

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

    【讨论】:

    • 一年后出现同样的问题。感谢发帖!
    • @Jugale:去年 11 月我告诉自己,如果我的失败只能让一个人免于在计算机上炸个洞,我会认为这是一场胜利。你刚给我W!我很高兴能帮上忙。祝你好运!
    • 为我解决了一个糟糕的错误。谢谢!
    • @MichaelPatzer 太棒了。很高兴听到。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-29
    • 2020-03-13
    • 2020-09-30
    • 2017-01-18
    相关资源
    最近更新 更多