2014-09-18 2 views
0

У меня есть функция в Swift, чтобы узнать, изменилась ли доступность/сетевое подключение ... но когда я изменяю wifi на 3g, это не обнаруживает никаких изменений, и я не знаю, почему это не вызвано .. У меня это в viewDidLoad :Как правильно использовать NSNotificationCenter в Swift?

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

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

И в пользовательских 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; 
}} 

Как я могу сделать это правильно?

+1

Это Objective-C not Swift! – ColinE

+0

Быстро с интегрированным объективом. Я использую только функцию Objective C: - (void) newtworkType {} – user3745888

ответ

-1

попытка notificationCenter в стрижа, используя данный код: -

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

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

Если я добавлю это в doneFinishLaunchingWithOptions на appDelegate, я получаю следующую ошибку: - [notif.AppDelegate textFieldTextChanged:]: нераспознанный селектор, отправленный в экземпляр 0x175875d0 – user3745888

1

Для вызова любого уведомления, метод PostNotificationName будет использоваться.

Позволяет принять условие, мы хотим вызвать метод уведомления при навигации с одного контроллера вида на другой при нажатии кнопки.

This method will navigate you to second view controller having identifier “Second View” 

@IBAction func navigateToSecondView(sender : AnyObject) 
{ 
    let storyboard : UIStoryboard = UIStoryboard(name: "Main", 
               bundle: nil) 
    let viewC : UIViewController = 
    storyboard.instantiateViewControllerWithIdentifier("SecondView") as UIViewController 
    presentViewController(viewC as UIViewController, animated: true, completion: nil) 

    // Action corresponding to the notification with name "ShowMessage” 
    // will be called 
    let notificationCentre = NSNotificationCenter.defaultCenter() 
    notificationCentre .postNotificationName("ShowMessage", object:nil) 
} 

Now write this in ViewDidLoad() of SecondViewController :- 

override func viewDidLoad() 
{ 
    super.viewDidLoad() 
    let notificationCentre = NSNotificationCenter.defaultCenter() 
    notificationCentre.addObserver(self, selector: "showMessage", name:  
    "ShowMessage”, object: nil) 
}  

// Add this function in SecondViewController Class 
func showMessage() 
{ 
    println(" Show Message View") 
} 

Так NSNotification работает для ViewControllers. Попробуйте этот код.Спасибо!

Смежные вопросы