2015-12-14 5 views
1

Я разрабатываю локальный код уведомления. Я могу отображать номер значка в соответствии с количеством запущенных уведомлений, а также я могу сделать все значки равными 0, когда пользователь открывает уведомление, но если пользователь запускает приложение, значок не установлен в 0. Это установлен только на 0, когда пользователь открывает уведомление. Я прочитал несколько ответов & несколько статей и не смог найти решение. Для того, чтобы зарегистрировать свое локальное оповещение у меня есть следующий код -Значок значка значка значка приложения не меняется до нуля при запуске приложения, прикоснувшись к значку приложения

func addItem(item: TodoItem) 
    { 
     // persist a representation of this todo item in NSUserDefaults 

     var todoDictionary = NSUserDefaults.standardUserDefaults().dictionaryForKey(ITEMS_KEY) ?? Dictionary()// if todoItems hasn't been set in user defaults, initialize todoDictionary to an empty dictionary using nil-coalescing operator (??) 

     todoDictionary[item.UUID] = ["deadline" : item.deadline, "title" : item.title, "UUID" : item.UUID]// store NSData representation of todo item in dictionary with UUID as key 

     NSUserDefaults.standardUserDefaults().setObject(todoDictionary, forKey: ITEMS_KEY) 

     let notification = UILocalNotification() 

     notification.alertBody = "Todo Item \"\(item.title)\" Is Overdue" // text that will be displayed in the notification 
     notification.alertAction = "open" // text that is displayed after "slide to..." on the lock screen - defaults to "slide to view" 
     notification.fireDate = item.deadline // todo item due date (when notification will be fired) 
     notification.soundName = UILocalNotificationDefaultSoundName // play default sound 
     notification.userInfo = ["title": item.title, "UUID": item.UUID] // assign a unique identifier to the notification so that we can retrieve it later 
     let nextbadge = (UIApplication.sharedApplication().scheduledLocalNotifications?.count)! + 1 
     notification.applicationIconBadgeNumber = nextbadge//here I provide an incremental badge number to my local notification. 
     UIApplication.sharedApplication().scheduleLocalNotification(notification) 


    } 

В моем классе appdelagate

func application(application: UIApplication, didReceiveLocalNotification notification: UILocalNotification) 
    { 
     NSNotificationCenter.defaultCenter().postNotificationName("ToDoListShouldtRefresh", object: self) 

     application.applicationIconBadgeNumber = 0; 


    } 

Сейчас в объективном CI обычно делают так, чтобы очистить значки на запуск приложения -

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    // Override point for customization after application launch. 

    // Handle launching from a notification 
    UILocalNotification *locationNotification = [launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey]; 
    if (locationNotification) { 
     // Set icon badge number to zero 
     application.applicationIconBadgeNumber = 0; 
    } 

    return YES; 
} 

Я пытался что-то подобное, но с напрасными -

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool 
    { 


     application.registerUserNotificationSettings(UIUserNotificationSettings (forTypes:[.Alert, .Badge, .Sound], categories: nil)) 
     if let notification:UILocalNotification = launchOptions?[UIApplicationLaunchOptionsLocalNotificationKey] as? UILocalNotification 
     { 

      application.applicationIconBadgeNumber = 0 
     } 
     return true 





    } 

Итак, как это сделать сейчас в SWIFT?

ответ

0

проблем нет с приложениемIconBadgeNumber. проблема заключается в локальном значении. addobserver и имя для localnotification

+0

К сожалению вы можете уточнить немного больше. –

0

UIApplicationLaunchOptionsLocalNotificationKey будет установлен только в том случае, если пользователь открывает приложение с помощью уведомления.

Так что, если вам нужно установить applicationIconBadgeNumber 0, сразу после запуска во всех случаях, вам не нужно никакой проверки на UIApplicationLaunchOptionsLocalNotificationKey:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool 
{ 
    application.registerUserNotificationSettings(UIUserNotificationSettings (forTypes:[.Alert, .Badge, .Sound], categories: nil)) 
    application.applicationIconBadgeNumber = 0 
    return true 

} 
Смежные вопросы