2016-04-13 13 views
0

Firs Ich rufe eine Methode von locationManager auf, um den Standort zu aktualisieren (didUpdateLocations). In diese Methode verwende ich eine postNotification und alles ist in Ordnung. Aber wenn ich die Methode von Locationmanager in einer zweiten Mal aufrufen, erscheint ein Fehler, „app beenden aufgrund nicht abgefangene Ausnahme‚NSInvalidArgumentException‘, Grund:‚- [NSMallocBlock sendMessageNotification:]: Unbekannter Selektor zum Beispiel 0x17026fac0 gesendet‘“Warum postNotification beim zweiten Aufruf in Swift fehlschlagen?

[Fehler auf Info Variable]

func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 
    debugLog("locations \(locations)") 

    if let location = locations.last { 

     let mMessage = Message() 
     mMessage.latitude = location.coordinate.latitude 
     mMessage.longitude = location.coordinate.longitude 
     let userInfo = ["message": JSONSerializer.toJson(mMessage)] 

     if !userInfo.isEmpty { 
      NSNotificationCenter.defaultCenter().postNotificationName("__SEND_MESSAGE__", 
       object: nil, 
       userInfo: userInfo) 
     } 


    } 
+0

Bitte zeigen Sie Ihren Code und den Stack-Trace, aber es sieht so aus, dass Sie irgendwie auf freigegebenen Speicher verweisen. – Paulw11

+0

Ich habe die Methode hinzugefügt, aber in der Stack-Trace nur sagen App beenden wegen nicht abgefangener Ausnahme 'NSInvalidArgumentException', Grund: '- [NSMallocBlock sendMessageNotification:]: unerkannter Selektor an Instanz 0x17026fac0 gesendet' – shadow

+0

Warum serialisieren Sie das Objekt in JSON? Sie könnten einfach das Nachrichtenobjekt zum Wörterbuch hinzufügen. In der Tat könnten Sie nur den Standort oder location.coordinate Objekt hinzufügen – Paulw11

Antwort

0

in meinem Code ein Entfernen Beobachter fehlte, in der gleichen Klasse, wo ich die Meldung hinzugefügt.

deinit { 
    // perform the deinitialization 
    NSNotificationCenter.defaultCenter().removeObserver(self) 
} 

Danke.