iphone - 误报 respondsToSelector with UIApplicationDelegate 导致 NSInvalidArgumentException

标签 iphone objective-c uiapplicationdelegate

简而言之,下面的代码调用父类中的一个现有选择器,然后给出一个 NSInvalidException:

- (void)applicationWillResignActive:(UIApplication *)application {
if ([super respondsToSelector:@selector(applicationWillResignActive:)])
{
    [super applicationWillResignActive:application];
}

这给出了以下日志异常:

  • *** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[aAppDelegate applicationDidEnterBackground:]:无法识别的选择器发送到实例 0x5b5d360”

详细说明...我有一个基本应用程序委托(delegate)(来 self 们的新公司库)声明为:

我有一个基础应用程序委托(delegate)类 BaseAppDelegate。它声明为:

@interface CoAppDelegate : NSObject <UIApplicationDelegate> 

它实现了:

- (void)applicationDidBecomeActive:(UIApplication *)application
{
    DebugLog(@"*** ACTIVE ****");
}

它没有实现 @selector(applicationWillResignActive:) - 或者至少我的意思是我没有专门为该方法写出代码。在 .h 或 .m 文件中找不到它。

我的应用有一个从 CoAppDelegate 继承的应用委托(delegate):

@interface aAppDelegate : CoAppDelegate <UIApplicationDelegate>

我将上述两种方法实现为:

- (void)applicationWillResignActive:(UIApplication *)application {
    if ([super respondsToSelector:@selector(applicationWillResignActive:)])
    {
        [super applicationWillResignActive:application];
    }
}

- (void)applicationDidBecomeActive:(UIApplication *)application {
    if ([super respondsToSelector:@selector(applicationDidBecomeActive:)])
    {   
        [super applicationDidBecomeActive:application];
    }
}

当应用程序启动时,我得到了调试输出“*** ACTIVE ****”——这是应该的。

当我将我的应用程序发送到后台时,我得到 NSInvalidArgumentException 声明响应者不存在 - 而且它不存在,所以这是抛出的正确异常。

我需要知道的是为什么当我期望看到否时 respondsToSelector 给出了是?我遗漏了什么微妙的东西?

最佳答案

你应该使用[self superclass]而不是[super class]:

[[self superclass] instancesRespondToSelector:@selector(method)]

关于iphone - 误报 respondsToSelector with UIApplicationDelegate 导致 NSInvalidArgumentException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4993069/

相关文章:

iphone - 使用 mfmailcomposeviewcontroller 时翻译按钮上的文本

ios - 在 Objective-C 的 TableView 中给出没有任何部分的部分索引以对单个 NSArray 进行排序?

objective-c - Cocoa Bindings,我应该只使用 KVO 吗?

objective-c - 在另一个类的应用程序委托(delegate)中使用 NSMutableArray

ios - appDelegate managedObjectContext 分布在代码库中

iphone - runloop 可以分配给 rununtildate 的最大值是多少?

iphone - 使用 Core Data/NSFetchedResultsController 进行键入搜索

ios - 具有合并更改的 CoreData 和 NSFetchedResultsController

ios - 快速访问应用程序委托(delegate)变量延迟 View 加载

ios - 在 applicationWillEnterForeground 之前更改 View