5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

UIApplication.applicationIconBadgeNumber は、値の反映に遅延があるっぽい

Last updated at Posted at 2014-11-30

ホーム画面に数字のバッチを表示する時は、UIApplication.applicationIconBadgeNumber を使用しますが、今回はそちら関する小ネタです。

実験ソースコード

for文でループさせて、applicationIconBadgeNumberに値を設定し、その後すぐに値を参照しています。

let application = UIApplication.sharedApplication()

application.applicationIconBadgeNumber = 0

// badge numberを増やす
for var i = 0; i < 10; i++ {
    application.applicationIconBadgeNumber = i
    
    // i と badge numberは一致するはず...
    println("i=\(i) bn=\(application.applicationIconBadgeNumber)")
}

実行すると、以下のようになります。

// 実行結果ログ
i=0 bn=0
i=1 bn=0
i=2 bn=1
...
i=9 bn=8

本来ならiの値とapplicationIconBadgeNumberの値は一致するはずですが、なぜかapplicationIconBadgeNumberの値が少なくなっています。

試しにsleepを入れると...

ここで、applicationIconBadgeNumberに値を設定した直後に1秒のsleepを入れてみます。

for var i = 0; i < 10; i++ {
    application.applicationIconBadgeNumber = i
    
	// sleepを入れてみる...
	sleep(1)

    // i と badge numberは一致するはず...
    println("i=\(i) bn=\(application.applicationIconBadgeNumber)")
}
// 実行結果
i=0 bn=0
i=1 bn=1
i=2 bn=2
...
i=9 bn=9

そうすると、意図通りに値が表示されます。

結論

ご覧のように、applicationIconBadgeNumberは、値を入れてもすぐには反映されない場合があるようです。

あまりこういう使い方をする人はいないと思いますが、知っておいたほうが良いかもですね。

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?