ホーム画面に数字のバッチを表示する時は、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は、値を入れてもすぐには反映されない場合があるようです。
あまりこういう使い方をする人はいないと思いますが、知っておいたほうが良いかもですね。