2012-12-26 128 views

回答

58

你應該 任一的AppDelegate方法設置此[UIApplication sharedApplication].applicationIconBadgeNumber = 0;如果應用程序啓動併發送到後臺,然後啓動該應用程序didFinishLaunchingWithOptions方法不會被調用,所以請使用以下兩種方法

- (void)applicationWillEnterForeground:(UIApplication *)application 

- (void)applicationDidBecomeActive:(UIApplication *)application 

對於斯威夫特3+

- func applicationWillEnterForeground(_ application: UIApplication) 
- func applicationDidBecomeActive(_ application: UIApplication) 
+0

您身在何處模擬器或設備檢查? – Sumanth

+0

在這兩個即時通訊中遇到同樣的問題 – Deepak

+0

如果您試圖在'viewDidLoad()'方法中獲得用戶座標,它將始終給出0,0結果,因爲CLLocation尚未初始化。所以使用Delegate方法來獲取位置詳細信息' - (void)locationManager:(CLLocationManager *)manager didUpdateToLocation :(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation' – Sumanth

1

你可以在代碼中的任何地方設置代碼..沒關係。但通常,保存在UIApplicationDidFinishLaunching ..

1

那麼,更好的方法是做一個函數,減去徽章號碼,然後讓UIButton讓用戶清除徽章。在默認郵件應用程序中,如果您閱讀了一封電子郵件,徽章將從圖標中減去一個。 你不應該在啓動或恢復時將它設置爲0,這是沒有意義的,並使應用看起來很糟糕。 當用戶與該事件互動時減去它是最好的方式。讓您的應用程序更專業,如果您只是在應用程序啓動時重置該應用程序,並且知道什麼是臥室的含義,那麼最好不要使用它。

+0

感謝您的評論 – Deepak

+1

我明白你在這裏得到什麼,但我不同意你總是想要遞減...許多應用程序使用徽章來表示「從應用程序上次登錄以來發生的事情」,但他們並不指望您閱讀所有這些應用程序,因爲有些應用程序可能對您並不感興趣。在這種情況下,它實際上只是在他們進入應用程序後清除徽章。是的,你可以讓代碼減少10倍,但這將是單調乏味的。 – TahoeWolverine

+0

作爲一個用戶,即使沒有什麼需要閱讀的應用程序仍然有一個徽章,它也使我惱火。這通常是因爲應用程序中存在錯誤,但無論哪種方式,在啓動時清除徽章都可以繞過用戶的這種煩惱。 – TahoeWolverine

1

在你AppDelegate.Swift迅速3+ ​​

,當你的應用程序主動清除所有像下面。

func applicationDidBecomeActive(_ application: UIApplication) { 
     UIApplication.shared.applicationIconBadgeNumber = 0 
    } 
0
UIApplication.shared.applicationIconBadgeNumber = 1 
    UIApplication.shared.applicationIconBadgeNumber = 0 
+0

爲清除您的通知,您必須首先增加您的數量然後爲零。這是IOS錯誤 –

+4

謝謝你的代碼片段,這可能會提供一些有限的,即時的幫助。一個[正確的解釋將大大提高其長期價值](/ meta.stackexchange.com/q/114762/350567)通過顯示*爲什麼*這是一個很好的解決方案,並會使它對未來更有用有其他類似問題的讀者。請[編輯]你的答案以添加一些解釋,包括你所做的假設。 – iBug