在目标上调用 xxx 时抛出无法识别的选择器发送到实例

Unrecognized selector sent to instance was thrown while invoking xxx on target

我在 AppDelegate.m 中声明了一个新方法,例如:

-(void):(UIApplication *)aMethod :(NSDictionary *)launchOptions{
......
    [UMessage registerForRemoteNotificationsWithLaunchOptions:launchOptions Entity:entity 
     completionHandler:^(BOOL granted, NSError * _Nullable error) {
        if (granted) {
        }else{
        }
    }];
......
}

在我的 AppDelegate.h:

- (void)aMethod;

在我的 anotherClass.m 中:

  AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
  [appDelegate aMethod];

当我 运行 anotherClass.m 中的代码时,我得到了错误。有谁知道我哪里错了?

发生错误是因为 .h 和 .m 中的方法签名不匹配,对于外部 classes,.h 文件是相关的。

但是还有一个更重要的mistake/misunderstanding。实际上你正在扩展 UIApplicationDelegate 这没有任何意义。将特定实例作为第一个参数传递的方法仅在声明 delegate 的实例中调用时才有用,在您的情况下为 UIApplication.

AppDelegate 中声明但从任意 class 调用的方法的签名应该与普通方法相同

.h

-(void)aMethod:(NSDictionary *)launchOptions;

.m

-(void)aMethod:(NSDictionary *)launchOptions { 
    ...
    [UMessage registerForRemoteNotificationsWithLaunchOptions:launchOptions 
                                                       Entity:entity 
                                            completionHandler:^(BOOL granted, NSError * _Nullable error) {
        if (granted) {
        }else{
        }
    }];
...
}

并使用它

AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
NSDictionary  *options = ...
[appDelegate aMethod: options];