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

2022-01-27 18:36:15 标签 iosobjective-creact-native-iosappdelegate

我在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];

当我在另一个类中运行代码时。我得到了错误。有人知道我错在哪里吗?

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

但还有一个更严重的错误/误解。实际上你在扩展UIApplicationDelegate,这没有意义。传递一个特定实例作为第一个参数的方法只有在实例中调用时才有用,在UIApplication中你的例子中,delegate被声明了。

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

。 h

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

00

-(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];
阅读全文

▼ 版权说明

相关文章也很精彩
推荐内容
更多标签
相关热门
全站排行
随便看看

错说 cuoshuo.com —— 程序员的报错记录

部分内容根据CC版权协议转载;网站内容仅供参考,生产环境使用务必查阅官方文档

辽ICP备19011660号-5

×

扫码关注公众号:职场神器
发送: 1
获取永久解锁本站全部文章的验证码