定义未取消引用的委托?

问题描述 投票:0回答:1

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

我可以完成这项工作。我在AppDelegate中使用<FIRMessagingDelegate>协议并实现其定义的方法:

1.- messaging:didReceiveRegistrationToken:在应用启动时接收令牌。

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

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

message.delegate = delegateObject;

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

看来该对象的引用被破坏了,当使用AppDelegate(自身)时,它工作正常,我进行了一些重新搜索,发现AppDelegate始终存在。

我如何创建一个可以充当委托且不会被取消引用的类?

ios objective-c firebase-cloud-messaging appdelegate
1个回答
1
投票

如下所示将您的代表添加到AppDelegate中。

@interface AppDelegate : UIResponder <UIApplicationDelegate>{

firebaseDelegate * delegateObject;

}
@end

然后必须运行。

© www.soinside.com 2019 - 2024. All rights reserved.