在Swift Class中访问Objective C AppDelegate String返回nil

时间:2017-03-13 14:26:46

标签: ios objective-c swift nsnumber

我尝试使用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

1 个答案:

答案 0 :(得分:1)

在代码中创建新变量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