2015-07-07 13 views
5

mam do czynienia z ram zewnętrzne akcesoria i tu jest mój kod do rejestracji notofication ..Metoda obsługi odebranego powiadomienia powoduje awarię aplikacji. :(

override func viewDidLoad() { 
    super.viewDidLoad() 

    EAAccessoryManager.sharedAccessoryManager().registerForLocalNotifications() 

    NSNotificationCenter.defaultCenter().addObserver(self, selector: "accessoryDidConnectNotify", name: EAAccessoryDidConnectNotification, object: nil) 
    } 

A oto moja funkcja manipulacja metoda ...

func accessoryDidConnectNotify(notification: NSNotification){ 


     let alert : UIAlertController = UIAlertController(title: "Alert", message: "MFi Accessory Connected", preferredStyle:UIAlertControllerStyle.Alert) 

     alert.addAction(UIAlertAction(title: "ok", style: UIAlertActionStyle.Default, handler: { (action) -> Void in 

     })) 

     self.presentViewController(alert, animated: true, completion: nil) 

I mój problem Jeśli nie podaję żadnych parametrów w funkcji accessoryDidConnectNotify, aplikacja działa poprawnie w widoku alertu po włożeniu akcesorium MFi ..

(i.e) func accessoryDidConnectNotify(){ // works fine (with no arguments) 
         } 

ale muszę obiekt NSNotification być używany wewnątrz mojej funkcji accessoryDidConnectNotify aby uzyskać nazwę akcesorium ... ale jeśli dodać NSNotification Object awarii appliaction na wstawienie akcesorium MFI ...

(i.e) func accessoryDidConnectNotify(notification: NSNotification){ 
} // crashes app (with arguments) 

Jeśli ktoś przyszedł również w poprzek problemu ... proszę nie podzielają

+4

wystarczy zmienić 'accessoryDidConnectNotify' na 'accessoryDidConnectNotify:' –

+2

Twoja funkcja ma jeden argument, stąd nazwa selektora musi być 'accessoryDidConnectNotify:' jako @DharmeshKheni napisał. Oto [więcej informacji] (http://stackoverflow.com/a/24007718/581190). – robertvojta

Odpowiedz

4

Jeśli metoda nie ma żadnego parametru wtedy można nazwać to w ten sposób:

NSNotificationCenter.defaultCenter().addObserver(self, selector: "accessoryDidConnectNotify", name: EAAccessoryDidConnectNotification, object: nil) 

za pomocą "accessoryDidConnectNotify".

Tak, że można użyć tej metody jak:

func accessoryDidConnectNotify(){ // works fine (with no arguments) 

    //Your code 
} 

Ale jeśli metoda ma parametry to trzeba nazwać to w ten sposób:

NSNotificationCenter.defaultCenter().addObserver(self, selector: "accessoryDidConnectNotify:", name: EAAccessoryDidConnectNotification, object: nil) 

Używając tej "accessoryDidConnectNotify:". tutaj musisz dodać :.

Teraz można wywołać metodę z parametrami w ten sposób:

func accessoryDidConnectNotify(notification: NSNotification){ 

    //Your code 
} 
Powiązane problemy