从swift文件发送通知并在ios中的目标c文件中接收

从swift文件发送通知并在ios中的目标c文件中接收,ios,objective-c,swift,nsnotificationcenter,bridging-header,Ios,Objective C,Swift,Nsnotificationcenter,Bridging Header,我正试图将swift文件中的通知发送到目标c。我迄今为止的努力: ClassA.swift override func viewDidLoad() { super.viewDidLoad() let containerDict:[String:AnyObject] = ["vwConatinerFrameWidth": vwContainer.frame.size.width, "vwConatinerFrameHeight": vwContainer

我正试图将swift文件中的通知发送到目标c。我迄今为止的努力:

ClassA.swift

    override func viewDidLoad() {
        super.viewDidLoad()

        let containerDict:[String:AnyObject] =  ["vwConatinerFrameWidth": vwContainer.frame.size.width, "vwConatinerFrameHeight": vwContainer.frame.size.height]

        NSNotificationCenter.defaultCenter().postNotificationName("ContainerFrame", object: self, userInfo: containerDict)

        let classB = ClassB(nibName: "ClassB", bundle: nil)

        classB.willMoveToParentViewController(self)

        self.vwContainer.addSubview(classB.view)

        self.addChildViewController(classB)
        classB.didMoveToParentViewController(self)

    }
ClassB.m

- (void)viewDidLoad
{
    [super viewDidLoad];

    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(containeFrameRecieved:)
                                                 name:@"ContainerFrame"
                                               object:nil];
}

- (void)containeFrameRecieved:(NSNotification *)note {
    NSDictionary *theData = [note userInfo];

    if (theData != nil) {

        CGFloat containerFrameWidth = [[theData objectForKey:@"vwConatinerFrameWidth"] floatValue];
        CGFloat containerFrameHeight = [[theData objectForKey:@"vwConatinerFrameHeight"] floatValue];

        NSLog(@"Width:%f and Height: %f",containerFrameWidth,containerFrameHeight);
    }
}

我的桥接头.h

#import "ClassB.h"

但问题是,这个值不属于ClassB。谁能告诉我这个代码有什么问题吗?

发布通知后,您正在创建
ClassB
的对象。因此,在发布notif时,
ClassB
对象不存在。在发布通知之前,确保调用了ClassB的
viewDidLoad:
。只有这样,
ClassB
才能收听notif并获得Swift 4.1的更新答案

// Notification name for swift
extension NSNotification.Name {
    static let NotificationName = Notification.Name(rawValue: "NotificationName")
}

// Notification name for Objective-C
@objc public extension NSNotification {
    public static var NotificationName: String {
        return "NotificationName"
    }
}
在swift文件中发布通知

NotificationCenter.default.post(name: NSNotification.Name.NotificationName, object: nil)
在objective-c文件中观察

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(selectorName:) name:NSNotification.NotificationName object:nil];

在ClassA发送通知之前,确保ClassB将自己添加为观察者。@damirstuhec:我做了,但没有做任何更改。
ClassA
ClassB
似乎是ViewController。他们真的同时“活着”吗?它们的生命周期是什么?实际上,ClassA viewcontroller将ClassB viewcontroller添加为ClassA的viewDidLoad中的childviewcontroller。请参阅更新的问题。在NSNotificationCenter.defaultCenter()中将self改为nil。postNotificationName(“ContainerFrame”,object:self,userInfo:containerDict)非常感谢。我认为我应该在创建CLassB对象之前发布通知。如果这样做,在发布通知时,B将不会订阅它们。