0

Wenn ich eine Push-Benachrichtigung erhalten, postNotificaionName ich über NSNotificationCenter (aus dem AppDelegate Verfahren unten):NSNotification Posting, wenn Push-Crash-Empfang

func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject], fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) { 

    playSoundWithUserInfo(userInfo) 
    NSNotificationCenter.defaultCenter().postNotificationName(kNotifPushReceived, object: nil) 

} 

ich einen meiner Ansicht-Controller ein Beobachter für diese Meldung mache:

override func viewDidLoad() { 
    super.viewDidLoad() 
    NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(retrieveUsersAndSetData(_:)), name: kNotifPushReceived, object: nil 
} 

func retrieveUsersAndSetData(completed : (() -> Void)?) { 
    Friendship.retrieveFriendshipsForUser(backendless.userService.currentUser, includeGroups: false) { (friendships, fault) -> Void in 
    guard let friendships = friendships else { return } 
    self.friendships = friendships 
    self.tableView.reloadData() 
    } 
} 

die meiste Zeit ich eine Push-Benachrichtigung erhalten, erhalte ich einen Absturz in der AppDelegate wo postNotificationName() aufgerufen wird:

enter image description here

Der Absturz liest:

Gewinde 1: EXC_BAD_ACCESS (code = 1, Adresse = 0x10070)

Jetzt sind die meisten Antworten, die ich gelesen habe, dass für dieses Problem ähnlich scheinen lassen vermuten, dass ein Das Objekt, das zum Beobachter gemacht wurde, wurde nie richtig freigegeben, aber ich glaube nicht, dass dies der Fall ist, weil dies derzeit der einzige View-Controller in der App ist, und ich implementiere das Folgende vom View-Controller, der der Beobachter ist die Benachrichtigung:

deinit { 
    NSNotificationCenter.defaultCenter().removeObserver(self) 
    } 

Alles in allem kann ich nicht herausfinden, warum dieser Absturz die meiste Zeit auftritt, wenn ich die Push-Benachrichtigung im App-Delegate erhalte und dann meine NSNotification poste.

+0

einzige Sache, auf die ich zeigen kann, ist kNotifPushReceived möglicherweise Null. –

+1

@GauravPal hat es definitiv einen String-Wert. Ich habe seitdem den Code, der in der Schließung des Selektors meines Beobachters auf dem Haupt-Thread war, und es scheint bis jetzt stabil – vikzilla

Antwort

0

Die Handler-Methode ‚fetchCompletionHandler‘ erwarten von Ihnen die completionHandler am Ende Ihrer Verarbeitung zu nennen:

completionHandler(UIBackgroundFetchResult.NewData) 

Bitte lesen Sie die Dokumentation dieser Methode gibt es mehr als nur das zu betrachten.

+0

Ja, ich hatte completionHandler (.NewData) am Ende der didReceiveRemoteNotification: -Methode; vergiss, in meinem Beispiel Code aufzunehmen. Ich hatte jedoch das gleiche Problem. Wie ich in einem Kommentar zu meinem Post erwähnt habe, ist dieser Absturz verschwunden, als ich den Code des Selektors meines Beobachters an den Hauptthread gesendet habe. – vikzilla

+0

Also alles in Ordnung jetzt? Wenn ja, dann beantworte deine eigene Frage und akzeptiere die Antwort mit deiner eigenen Lösung. So können andere es auch finden. – Darko