gpt4 book ai didi

ios - 你能调配应用程序 :didReceiveRemoteNotification:

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:47:07 24 4
gpt4 key购买 nike

我目前正在开发一个需要调整 AppDelegate 应用程序的产品:didReceiveRemoteNotification:(我不想在 appDelegate 本身中调用我的新方法)。

问题是:调配根本不起作用。之前我已经多次调配方法并取得成功,而这一次,替换实现根本没有被调用。我想知道这是否是因为 appDelegate 方法的某些特殊性,因为这些方法是由系统调用的,而不是应用程序调用的。

最佳答案

我将假设您的问题中缺少的大部分内容,最好始终尽可能发布带有代码示例的问题。

  1. 您需要确保在 UIApplicationDelegate 的特定实现上调整您的方法,而不是 UIApplicationDelegate 本身。例如

    @interface AppDelegate : UIResponder <UIApplicationDelegate>
    @end

    在这种情况下,您需要调整 AppDelegate 类。

  2. 此外,如果您正在尝试编写静态库/框架,您可能根本不知道此类的名称。在这种情况下,最简单/最安全的方法是询问 App 的 AppDelegate 名称,并使用它通过 NSClassFromString() 检索特定的类实例,或者您可以通过蛮力找到您需要的类(因为您通常有一个单一的 AppDelegate 类)。

        unsigned int numberOfClasses = 0;
    Class *classes = objc_copyClassList(&numberOfClasses);
    Class appDelegateClass = nil;
    for (unsigned int i = 0; i < numberOfClasses; ++i) {
    if (class_conformsToProtocol(classes[i], @protocol(UIApplicationDelegate))) {
    appDelegateClass = classes[i];
    }
    }

编辑

上述方法有一些缺点,

  1. 它遍历您的应用程序代码可访问的所有类,遍历所有这些类并不是一个高效的解决方案。

  2. 许多著名的 SDK 会调配或动态扩展您的 AppDelegate,因为可以在这个地方拦截很多有趣的东西。这也意味着您的应用程序可能有多个 UIApplicationDelegate 协议(protocol)的实现,并且上面的代码可能只是选择它的任何实现,从而导致一些严重的问题。

正如 Chris 在下面的评论中所建议的那样,仅使用 [[UIApplication sharedApplication].delegate class] 会更加安全和高效。在调用这行代码时,它应该为您提供 iOS 应用程序已知的确切 AppDelegate 实现。

关于ios - 你能调配应用程序 :didReceiveRemoteNotification:,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20483159/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com