代码之家  ›  专栏  ›  技术社区  ›  Curt Nichols

选择器问题

  •  1
  • Curt Nichols  · 技术社区  · 16 年前

    我一定误解了什么。我只想使用PerformSelector:调用我自己的方法之一。我在@interface中有一个方法声明:

    -(void)forceReload;
    

    仅供参考,所有这些代码都只在一个类型上定义。下面是方法实现和调用方法:

    -(void)forceReload {
        // code here...
    }
    
    -(void)entryActivityEditViewControllerDidFinish {
    
        // etc...
    
        DebugLog(@"self=%@", self);
        DebugLog(@"responds to selector=%@", [self respondsToSelector:@selector(forceReload:)] ? @"true" : @"false");
        [self forceReload]; // Works fine
        [self performSelector:@selector(forceReload:)]; // unrecognized selector
    }
    

    让我困惑的是,我可以将消息直接发送到对象,但在与PerformSelector一起使用时失败:。前者的成功是否意味着后者的成功?

    为了解决这个问题,这里有一些调试说明,我的目标对象(self)是我认为的类型,并且我正在发送给适当的对象。我还调用了respondstoselector:发现我的对象对forcereload没有响应:这让我更加困惑。为什么会这样?

    0x1006030/-[EntryActivityTableViewController entryActivityEditViewControllerDidFinish] (EntryActivityTableViewController.m:236): self=<EntryActivityTableViewController: 0x1259160>
    0x1006030/-[EntryActivityTableViewController entryActivityEditViewControllerDidFinish] (EntryActivityTableViewController.m:237): responds to selector=false
    2009-12-20 10:22:44.999 Workouts[407:207] *** -[EntryActivityTableViewController forceReload:]: unrecognized selector sent to instance 0x1259160
    2009-12-20 10:22:45.017 Workouts[407:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[EntryActivityTableViewController forceReload:]: unrecognized selector sent to instance 0x1259160'
    

    请告诉我我的理解哪里错了。-)

    1 回复  |  直到 16 年前
        1
  •  3
  •   Ben Gottlieb    16 年前

    您的方法不接受任何参数,但您的@selector()调用请求一个接受一个参数的选择器。你想要的是:

    [self performSelector:@selector(forceReload)]; // unrecognized selector