首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSInvocation的意外异常

NSInvocation的意外异常
EN

Stack Overflow用户
提问于 2013-05-10 12:29:02
回答 2查看 1.4K关注 0票数 0

下面的代码引发异常。

vcClass是一个Class对象(从UIViewController继承)。Self包含我的viewWillAppear:实现

代码语言:javascript
复制
SEL viewWillAppearSEL = @selector(viewWillAppear:);
IMP viewWillAppearWithSuperIMP = [self methodForSelector:viewWillAppearSEL];
class_addMethod(vcClass, viewWillAppearSEL, viewWillAppearWithSuperIMP, @encode(BOOL));
NSMethodSignature *methodSignature = [vcClass instanceMethodSignatureForSelector:viewWillAppearSEL];
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:methodSignature];
[invocation setSelector:viewWillAppearSEL];

并附有信息:

由于异常“NSInvalidArgumentException”终止应用程序,原因:-NSInvocation:atIndex::index (1)超出范围-1,-1

附加信息: iOS5,ARC。有人能解释我出什么事了吗?

更新:

这段代码为我提供了响应消息。所以我的类对象是正确的-- vcClass实例--viewWillAppearSEL:viewWillAppearSEL?NSLog(@"responds"):NSLog(@“”)

我在[invocation setSelector:viewWillAppearSEL];之后马上就要崩溃了。这就是为什么我将主题标题称为NSInvocation意外异常的原因。

UPDATED2:

也是我的viewWillAppear:实现

代码语言:javascript
复制
- (void)viewWillAppear:(BOOL)animated {
    Class parentViewController = [self superclass];
    void (*superViewWillAppear)(id, SEL, BOOL) =(void(*)(id, SEL, BOOL))class_getMethodImplementation(parentViewController, _cmd);
    superViewWillAppear(self, _cmd, animated);
    NSLog(@"view will appear with super");
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-18 09:45:59

代码的一个问题是要传递给class_addMethod()的类型编码。这种类型编码必须包括: 1)返回类型,2) self_cmd的类型(前两个隐藏参数),3)所有其他参数的类型。

对于像- (void)viewWillAppear:(BOOL)animated这样的方法,类型编码应该是字符串

v@:c

  • v --对于void,返回类型
  • @ --对于id,键入self
  • : --对于SEL,键入_cmd
  • c --对char来说,BOOL就是这样。这就是你做@encode(BOOL)的时候得到的
票数 1
EN

Stack Overflow用户

发布于 2013-05-10 12:43:10

BOOL *arg1 1;

代码语言:javascript
复制
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:methodSignature];
[invocation setSelector:viewWillAppearSEL];
[invocation setArgument:&arg1 atIndex:2];   // argument indexing is offset by 2 hidden args
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16482302

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档