繁体   English   中英

在Swift类中访问Objective C AppDelegate字符串返回nil

[英]Accessing Objective C AppDelegate String in Swift Class returns nil

我试图在/使用Swift类从ObjectiveC AppDelegate访问NSNumber值,但是它在Swift方面不断返回nil-但是它填充在Objective C类中(我相信这是由于我在Swift中调用它-即使通过代码补全找到了它-由于某种原因,在两者之间传递时仍然会丢失。

任何建议表示赞赏。

Objective C AppDelegate.m:

...

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)notification
{
    theNotification = notification;
    NSDictionary *aps = (NSDictionary *)[notification objectForKey:@"aps"];
    NSNumber *chatId = [aps objectForKey:@"chatId"];

    }

    ...

目标C AppDelegate.h:

... 

@property (nonatomic) NSNumber* chatId;

...

迅速:

 class func clientChatSendMessage(_ chatId: NSNumber, message: String, completionHandler: @escaping (Data?, NSError?) -> ()) -> URLSessionTask {


    let oCchatId: AppDelegate = AppDelegate()
    let chatSessionId:NSNumber  = oCchatId.chatId

在您的代码中,创建新变量NSNumber *chatId = [aps objectForKey:@"chatId"];

尝试这个:

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)notification
{
    theNotification = notification;
    NSDictionary *aps = (NSDictionary *)[notification objectForKey:@"aps"];
    self.chatId = [aps objectForKey:@"chatId"];

}

编辑

正如Caleb在评论中所说

我认为AppDelegate的新实例也是一个问题。 应该使用UIApplication.shared.delegate.chatId访问它

所以你也需要改变

class func clientChatSendMessage(_ chatId: NSNumber, message: String, completionHandler: @escaping (Data?, NSError?) -> ()) -> URLSessionTask {


    let oCchatId: AppDelegate = UIApplication.shared.delegate() as! AppDelegate
    let chatSessionId:NSNumber  = oCchatId.chatId

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM