You're calling it in didFinishLaunchingWithOptions
that way it'll only get cleared on launching the app.
Have you tried killing the app from the multitasking menu and launching it again?
Also try and move setApplicationIconBadgeNumber
in applicationDidBecomeActive
.