gpt4 book ai didi

ios - 定义一个不会被取消引用的委托(delegate)?

转载 作者:行者123 更新时间:2023-11-28 23:26:49 25 4
gpt4 key购买 nike

现在,我正在实现 FIRMessaging 以接收来自 Firebase Cloud Messaging 的通知。我通过在 firebase 控制台中创建一个新项目进行了测试,然后注册了我的捆绑 ID,我下载了配置文件并复制到我的项目(单 View 应用程序),然后安装了必要的 Pod。在我的 AppDelegate 中,我使用 FIRMessaging 获取通知,使用 Firebase 核心连接到 firebase。

我可以做到这一点。我用<FIRMessagingDelegate>我的 AppDelegate 中的协议(protocol)并实现它定义的方法:

1.- messaging:didReceiveRegistrationToken:当应用程序启动时它会收到一个 token 。

2.- messaging:didReceiveMessage:接收来自 firebase 的通知。

我在我的 application:didFinishLaunchingWithOptions 中编写了下一个代码

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
[FIRApp configure];
firebaseDelegate * delegateObject = [[firebaseDelegate alloc] init];
FIRMessaging * message = [FIRMessaging messaging];
message.shouldEstablishDirectChannel = YES;
message.autoInitEnabled = YES;
message.delegate = self;
NSLog(@"TOKEN : %@",message.FCMToken);

NSLog(@"Firebase initialization completed");
return YES;

这是我的 firebaseDelegate.h

#import <Foundation/Foundation.h>
#import <FirebaseMessaging/FIRMessaging.h>
@interface firebaseDelegate : NSObject <FIRMessagingDelegate>
@end

这是我的实现

#import "firebaseDelegate.h"
@implementation firebaseDelegate

- (void)messaging:(FIRMessaging *)messaging didReceiveRegistrationToken:(NSString *)fcmToken
{
NSUserDefaults * userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setObject:fcmToken forKey:@"token"];
}

-(void)messaging:(FIRMessaging *)messaging didReceiveMessage:(FIRMessagingRemoteMessage *)remoteMessage
{
NSLog(@"Message: %@",[remoteMessage appData]);
}
@end

这是我之前提到的第二种方法的实现(位于我的 AppDelegate 内部):

-(void)messaging:(FIRMessaging *)messaging didReceiveMessage:(FIRMessagingRemoteMessage *)remoteMessage{
NSLog(@"Message: %@",[remoteMessage appData]);}

当我发出通知时,我收到了它并像这样出现在日志上 enter image description here

但是当我尝试定义一个符合这两个方法的类并更改此类实例的委托(delegate)(行 message.delegate = self; )时,如下所示:

message.delegate = delegateObject;

我在日志中得到了这个: enter image description here

看来该对象的引用被破坏了,当使用 AppDelegate (self) 时它工作正常,我做了一些研究并发现 AppDelegate 始终存在。

我怎样才能创建一个可以作为委托(delegate)工作并且不会被取消引用的类?

最佳答案

将您的委托(delegate)添加到 AppDelegate 中,如下所示。

@interface AppDelegate : UIResponder <UIApplicationDelegate>{

firebaseDelegate * delegateObject;

}
@end

那么它必须起作用。

关于ios - 定义一个不会被取消引用的委托(delegate)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58415828/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com