在目标上调用 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];
我在 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];