如何正确使用Swift中的NSNotificationCenter?

时间:2014-09-18 05:24:44

标签: objective-c swift nsnotificationcenter

我在Swift中有一个函数来知道可达性/网络连接是否发生变化..但是当我将wifi更改为3g时,这没有检测到任何变化,而且我不知道为什么不调用它。 我在viewDidLoad中有这个:

var kReachabilityChangedNotification:NSString = "kNetworkReachabilityChangedNotification"
NSNotificationCenter.defaultCenter().addObserver(self, selector: "reachabilityChanged:",    name: kReachabilityChangedNotification, object: nil)

 func reachabilityChanged(sender : AnyObject) {
     instanceOfCustomObject.newtworkType()
}

在Custom object.m中:

- (void)newtworkType {

NSArray *subviews = [[[[UIApplication sharedApplication] valueForKey:@"statusBar"] valueForKey:@"foregroundView"]subviews];
NSNumber *dataNetworkItemView = nil;

for (id subview in subviews) {
    if([subview isKindOfClass:[NSClassFromString(@"UIStatusBarDataNetworkItemView") class]]) {
        dataNetworkItemView = subview;
        break;
    }
}

switch ([[dataNetworkItemView valueForKey:@"dataNetworkType"]integerValue]) {
    case 0:
        networkConnection = @"No wifi or cellular";
        NSLog(@"No wifi or cellular");
        break;

    case 1:
        networkConnection = @"2G";
        NSLog(@"2G");
        break;

    case 2:
        networkConnection = @"3G";
        NSLog(@"3G");
        break;

    case 3:
        networkConnection = @"4G";
        NSLog(@"4G");
        break;

    case 4:
        networkConnection = @"LTE";
        NSLog(@"LTE");
        break;

    case 5:
        networkConnection = @"Wifi";
        NSLog(@"Wifi");
        break;


    default:
        break;
}}

我该怎么做?

2 个答案:

答案 0 :(得分:1)

要调用任何通知,将使用PostNotificationName方法。

让我们假设一个条件,我们想在按钮点击的同时从一个视图控制器导航到另一个视图控制器时调用通知方法。

Foo

这就是NSNotification如何为ViewControllers工作。 请尝试此代码。谢谢

答案 1 :(得分:-1)

使用给定代码在swift中尝试notificationCenter: -

let notificationCenter = NSNotificationCenter.defaultCenter()
notificationCenter.addObserver(
self,
selector: "textFieldTextChanged:",
name:UITextFieldTextDidChangeNotification,
object: nil)

func textFieldTextChanged(sender : AnyObject) {
sendButton.enabled = messageField.text.utf16count > 0
}