• AppDelegate 中调用UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCente一定几率下出现 #28502 NSInternalInconsistencyException Invalid parameter not satisfying: bundleProxy != nil


    2019年2月27日:

    修复bug:

    查找资料:

     

     

     

    解决方式:添加分类,对系统方法替换,做非空校验

     #import "UNUserNotificationCenter+Hack.h"

    #import <objc/runtime.h>

    @implementation UNUserNotificationCenter (Hack)
    + (void)load {
    static dispatch_once_t _onceToken;
    dispatch_once(&_onceToken, ^{
    [self safeHook];
    });
    }

    + (void)safeHook {

    /*hook UNUserNotificationCenter's systemMethod - (id)initWithBundleProxy:(id)arg1;*/
    NSString * orig_initWithBundleProxyName = @"initWithBundleProxy:";

    SEL orig_initWithBundleSelector = NSSelectorFromString(orig_initWithBundleProxyName);

    if (![self instancesRespondToSelector:orig_initWithBundleSelector]) {
    return;
    }

    SEL alt_initWithBundleSelector = @selector(hk_initWithBundleProxy:);
    Method origMethod = class_getInstanceMethod(self, orig_initWithBundleSelector);
    Method altMethod = class_getInstanceMethod(self, @selector(hk_initWithBundleProxy:));

    class_addMethod(self,
    orig_initWithBundleSelector,
    class_getMethodImplementation(self, orig_initWithBundleSelector),
    method_getTypeEncoding(origMethod));
    class_addMethod(self,
    alt_initWithBundleSelector,
    class_getMethodImplementation(self, alt_initWithBundleSelector),
    method_getTypeEncoding(altMethod));

    method_exchangeImplementations(origMethod, altMethod);
    }

    - (instancetype)hk_initWithBundleProxy:(id)arg1 {

    if (nil==arg1||NSNull.null==arg1) return nil;
    // return [self hk_initWithBundleProxy:nil]; //crash
    return [self hk_initWithBundleProxy:arg1];
    }

    @end

  • 相关阅读:
    关于在windows10中的vmware9.0里面安装的ubuntukylin15.04和windows共享目录的一些反思
    关于最近工程的一些心得
    关于springMVC中component-scan的问题以及springmvc.xml整理
    初学node.js有感三
    初学node.js有感二
    初学node.js有感一
    编译原理——算符优先分析文法(附源代码)
    数据结构与算法系列研究九——排序算法的一些探讨
    LeetCode: Same Tree
    LeetCode: Symmetric Tree
  • 原文地址:https://www.cnblogs.com/coolcold/p/10454867.html
Copyright © 2020-2023  润新知