从不兼容的类型 'AppDelegate *const __strong' 分配给 'NSObject<PushNotificationDelegate> *'

Assigning to 'NSObject<PushNotificationDelegate> *' from incompatible type 'AppDelegate *const __strong'

我正在尝试将 Pushwoosh 实施到我的游戏中,这是非常简单的指南,但我 运行 在这里解决这个问题:

您的 AppDelegate 实现应如下所示:

@implementation AppDelegate <PushNotificationDelegate>

第 20 行。

这意味着您的 AppDelegate 符合 PushNotificationDelegate 协议。

对于我的情况,我需要符合头文件中的协议以消除警告。我不知道我在做什么。

#import <UIKit/UIKit.h>
#import "BaseAppDelegate.h"
#import <Pushwoosh/PushNotificationManager.h>

@interface ChildAppDelegate : BaseAppDelegate <UIApplicationDelegate, PushNotificationDelegate>

@end

阅读协议。基本上,协议是 and/or 属性的方法列表,object 必须(或者可能,在 @optional 属性的情况下)具有。您将该错误消息中的 NSObject<PushNotificationDelegate> 读为 "any NSObject subclass that declares that it implements the methods in the PushNotificationDelegate protocol"。

为了声明你的 class 符合协议,你在 <> 之间写下协议的名称 @interface@implementation 行。

编译器分别读取每个源文件,并从该源文件中 header 为您 #import(如果您想了解更多信息,请继续阅读 "compilation units")。因此,如果您在 .m 文件中写入 <PushNotificationDelegate> 位,则只有 .m 文件中的代码知道它,因为其他 .m 文件只能看到您在 header.

在你的情况下,AppDelegate.m 源文件 应该 看到,但也许你有另一个源文件,你在其中设置了相同类型的委托,只包括AppDelegate 的 header 因此看不到它?

无论如何,如果您使用这些知识阅读此错误消息,您会看到 PushNotificationManager.delegate 被声明为 NSObject<PushNotificationDelegate>,这就是您的 AppDelegate 必须是的能够将其分配给 属性。并且错误正确地说 AppDelegate 可能是 NSObject,但不是 PushNotificationDelegate.

声明您的 class 符合协议的好处是,如果您忘记实现所需的方法,编译器将打印一条错误消息。