1

Ist es möglich, die Eigenschaft UIApplication.sharedApplication() in swift irgendwie zu beobachten?Swift observe UIApplication property

Ich muss UIApplication.sharedApplication().applicationIconBadgeNumber verfolgen, um meine App basierend auf dieser Nummer zu aktualisieren, aber immer wenn diese Eigenschaft geändert wird UI ist nicht betroffen.

Mein Code bezüglich dieser:

private var badgeCount: String = String(UIApplication.sharedApplication().applicationIconBadgeNumber) 

override func viewWillAppear(animated: Bool) { 
    super.viewWillAppear(animated) 

    self.notificationsButton.setTitle(self.badgeCount, forState: .Normal) 
} 

Antwort

2

Dies funktioniert Lösung kann für Sie iconBadgeNumber berechnete Variable UIApplication über Erweiterung hinzufügen und es wird die Real-Variable und benachrichtigen Sie Ihre App von Änderungen

extension UIApplication 
{ 
    var iconBadgeNumber:Int { set{self.applicationIconBadgeNumber = iconBadgeNumber 
      NSNotificationCenter.defaultCenter().postNotificationName("BageNumberChanged", object: nil) 
     } get{return self.applicationIconBadgeNumber}} 
} 

//Add this at Observer 
NSNotificationCenter.defaultCenter().addObserver(self, selector: #Selector(Controller.Method), name: "BageNumberChanged", object: nil) 
0
gesetzt

enter image description here

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 
    // Override point for customization after application launch. 


    UIApplication.sharedApplication().applicationIconBadgeNumber = 5 

    return true 
} 
override func viewWillAppear(animated: Bool) { 
     super.viewWillAppear(true) 

     let badgeCount: String = String(UIApplication.sharedApplication().applicationIconBadgeNumber) 

     let notificationsButton: UIButton = UIButton (type: UIButtonType.Custom) 

     notificationsButton.addTarget(self, action: "tapBarNotificationsButton", forControlEvents: UIControlEvents.TouchUpInside) 

     notificationsButton.frame = CGRectMake(0, 0, 25, 25) 

     notificationsButton.backgroundColor = UIColor.blackColor() 

     notificationsButton.setTitle(badgeCount, forState: .Normal) 

     let barnotificationsButton = UIBarButtonItem(customView: notificationsButton) 

     self.navigationItem.setRightBarButtonItem(barnotificationsButton, animated: true) 



    }