簡體   English   中英

從swift文件發送通知並在ios中接收目標c文件

[英]send notification from swift file and recieve in objective c file in ios

我正在嘗試將通知從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);
    }

}

我的橋接,Header.h

#import "ClassB.h"

但是問題是,該價值並沒有體現在ClassB上。 誰能告訴我這段代碼有什么問題嗎?

發布通知后,您將創建ClassB的對象。 因此,在發布通知時, ClassB對象不存在。 發布通知之前,請確保已調用ClassB的viewDidLoad: 只有這樣, ClassB才能收聽通知並獲取值

更新了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];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM