首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在obj-c中有任何方法可以连接到应用程序委托方法中吗?

在obj-c中有任何方法可以连接到应用程序委托方法中吗?
EN

Stack Overflow用户
提问于 2014-10-17 15:41:22
回答 1查看 692关注 0票数 0

问题是

我使用Marmalade (http://www.madewithmarmalade.com/)。

Marmalade SDK提供了编写特定于平台的插件(术语中的扩展)的机会。

每个扩展都被编译为静态库,并使用特殊的部署工具链接到主应用程序(术语中是Loader)。

主应用程序的源代码没有打开,因此我们无法实现/覆盖app委托方法。

我需要一个通过Upsight SDK (以前的PLayhaven)来管理远程推送通知的扩展。

ios 8来了,需要为远程推送通知注册做一些额外的努力。特别是,应该实现didRegisterUserNotificationSettings和didRegisterUserNotificationSettings。

问题是

如何从静态库(无法访问主应用程序的源)向应用程序委托方法注入?

的想法是

1)使用类别。我尝试向UIApplication类添加新方法,然后将它们与原始方法交换。我的新方法完成了他们的工作,然后调用了原始的方法。但这似乎行不通。我的工作经验很差。要么是我的类扩展实现错误,要么是最初的想法不正确:

代码语言:javascript
复制
   @interface UIApplication(MyDelegate)
    - (void)application:(UIApplication *)application newDidRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings;
    @end

    @implementation UIApplication(MyDelegate)
    - (void)application:(UIApplication *)application newDidRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings
    {
        NSLog(@"PLAYHAVEN: didRegisterUserNotificationSettings:%@", notificationSettings);
        [[PHPushProvider sharedInstance] registerUserNotificationSettings:notificationSettings];
    }
    @end

    s3eResult s3ePlayhavenInit_platform()
    {

        // Add any platform-specific initialisation code here
        myDelegate = [[MyDeleagte alloc] init];

        oldHandler1 = class_getInstanceMethod([UIApplication class], @selector(application:didRegisterUserNotificationSettings:));
        newHandler1 = class_getInstanceMethod([UIApplication class], @selector(application:newDidRegisterUserNotificationSettings:));
        method_exchangeImplementations(oldHandler1, newHandler1);

        ...
        return S3E_RESULT_SUCCESS;
    }

2)使用NSNotificationCenter侦听相应的通知:

代码语言:javascript
复制
[[NSNotificationCenter defaultCenter] addObserver:myDelegate selector:@selector(didRegisterUserNotificationSettings:) name:@"UIApplicationDidRegisterUserNotificationSettings" object:nil];

但是我不确定这个名字的通知会不会被贴出来。我没有在UIApplication类中找到任何相关的constans。因此,这也不起作用。

最后一个问题是:

有可能吗?有什么想法吗?

谢谢大家。

EN

回答 1

Stack Overflow用户

发布于 2015-02-12 05:29:22

这种技术(1)除了didRegisterUserNotificationSettings函数外,也是UIApplicationDelegate的一部分。获得正确委托的诀窍是挂起UIApplication的UIApplication函数,然后对委托类执行方法swizzling。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26428638

复制
相关文章

相似问题

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