V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
iOS 开发实用技术导航
NSHipster 中文版
http://nshipster.cn/
cocos2d 开源 2D 游戏引擎
http://www.cocos2d-iphone.org/
CocoaPods
http://cocoapods.org/
Google Analytics for Mobile 统计解决方案
http://code.google.com/mobile/analytics/
WWDC
https://developer.apple.com/wwdc/
Design Guides and Resources
https://developer.apple.com/design/
Transcripts of WWDC sessions
http://asciiwwdc.com
Cocoa with Love
http://cocoawithlove.com/
Cocoa Dev Central
http://cocoadevcentral.com/
NSHipster
http://nshipster.com/
Style Guides
Google Objective-C Style Guide
NYTimes Objective-C Style Guide
Useful Tools and Services
Charles Web Debugging Proxy
Smore
Kai
V2EX  ›  iDev

关于 Icon Badge Number 的问题

  •  
  •   Kai · 2011-01-04 00:49:16 +08:00 · 5996 次点击
    这是一个创建于 5097 天前的主题,其中的信息可能已经有所发展或是发生改变。
    一个 Local Notification 在生成提醒的时候可以选择开启 applicationIconBadgeNumber 并且设置一个参数。

    我的理解是这个参数应该是指当前系统 Icon 显示的 Badge Number 总数,并且系统不会为你做加法减法。这样一来当需要一次有多个事件触发的时候,就需要在生成那个提醒的时候将 Badge Number 总数算好。

    按照这个思路,我的 Local Notification 创建时候的部分代码如下:
    http://pastie.org/1425960

    可是似乎这样不太对,因为多事件触发后 badge number 还是一直显示为 "1" ......
    8 条回复    1970-01-01 08:00:00 +08:00
    Kai
        1
    Kai  
    MOD
    OP
       2011-01-04 00:50:44 +08:00
    Livid
        2
    Livid  
    MOD
       2011-01-04 01:01:07 +08:00
    如果是这样会发生什么?

    localNotif.applicationIconBadgeNumber = localNotif.applicationIconBadgeNumber + 1;
    Kai
        3
    Kai  
    MOD
    OP
       2011-01-04 01:14:10 +08:00
    @Livid 还是一样的。

    我在想,现在这种情况是,假设定时之前,系统还没有收到触发的提醒事件( applicationIconBadgeNumber == 0 )。所以这个时候创建提醒的话,似乎就没有办法比较容易的获得一个准确的 Icon Badge Number 总数?
    Kai
        4
    Kai  
    MOD
    OP
       2011-01-04 02:36:41 +08:00
    似乎 iOS 4 下 Local Notification 的 applicationIconBadgeNumber 还需要不断完善的,这里有相关讨论:
    http://stackoverflow.com/questions/3200608/how-can-i-increment-app-icon-badge-when-multiple-local-notifications-fire
    Kai
        5
    Kai  
    MOD
    OP
       2011-01-04 02:37:43 +08:00
    Livid
        6
    Livid  
    MOD
       2011-01-04 02:46:15 +08:00
    看来需要自己维护一个计数器。
    Kai
        7
    Kai  
    MOD
    OP
       2011-01-04 03:15:25 +08:00
    只好这样了。

    p.s. 这下科幻了,系统也没有预设的(即将)接到本地通知的 method, 那个 didReceiveLocalNotification: 也只是给前台运行时候准备的。
    Kai
        8
    Kai  
    MOD
    OP
       2011-01-04 09:10:16 +08:00
    最后还是通过做了一个简单的计数器搞定了这个问题。

    一个小 tip,或许对以后碰到这个问题的朋友们有帮助:
    扎堆添加 Local Notification 会比较方便;同时 applicationLocalNotification 的数字是按照从大到小的顺序反着排列的,也就是说第一个加入定时的事件 Badge Number 应该是最大值,然后递减到 1。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3396 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 11:05 · PVG 19:05 · LAX 03:05 · JFK 06:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.