Obecnie tworzę scenariusze sceniczne w taki sposób:
var iphone35StoryBoard:UIStoryboard = UIStoryboard(name: "iphone35", bundle: nil)
var initialViewController:UIViewController = iphone35StoryBoard.instantiateInitialViewController() as! UIViewController
self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
self.window?.rootViewController = initialViewController
self.window?.makeKeyAndVisible()
Po raz pierwszy pracuję z pushpowiadomienia, więc nie jestem najlepszą praktyką, ale próbuję zrobić to w didReceiveRemoteNotification, a gdy aplikacja jest w stanie aktywnym (pierwszym planie), chciałbym móc określić, jaki widok użytkownik aktualnie przegląda aby ustalić, czy powinienem: A) zadzwonić do lokalnego powiadomienia lub B) zaktualizować widok, jeśli powiadomienie push odpowiada widocznemu widokowi.
Korzystając z różnych innych pytań związanych z SO, próbowałem uzyskać dostęp do kontrolera viewview przy użyciu następujących odmian kodu:
let navigationController = application.windows[0].rootViewController as! UINavigationController
1)
let visibleController: AnyObject? = navigationController.visibleViewController
if visibleController is ProfileViewController {
println("this works")
}
i
2)
let viewControllers: [UIViewController] = navigationController.viewControllers as! [UIViewController]
for vc in viewControllers {
if vc is ProfileViewController {
println("this works")
}
}
3)
if let wd = self.window {
var vc = wd.rootViewController
if(vc is UINavigationController){
vc = (vc as UINavigationController).visibleViewController
}
if(vc is ProfileViewController){
println("this works")
}
}
Problem, na który wpadam, polega na tym, że mogę tylkouzyskaj rootviewcontroller, a nigdy widoczny kontroler widoku. W tym przypadku rootviewcontroller to ekran logowania i pomimo tego, że jestem na profileViewController, mogę uzyskać tylko loginviewcontroller. Czy to najlepsza metoda radzenia sobie z powiadomieniami push?
Odpowiedzi:
1 dla odpowiedzi № 1Przenieś do kontrolera widoku docelowego z scenorysu, gdy pojawi się powiadomienie wypychane
let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main",bundle: nil)
var destViewController : destVC
destViewController = mainStoryboard.instantiateViewControllerWithIdentifier("destVC") as! destVC
var navigationController = UIApplication.sharedApplication().keyWindow!.rootViewController as! UINavigationController
navigationController.pushViewController(destViewController, animated: true)
To działa dla mnie od appdelegate.
Skorzystaj z centrum powiadomień, aby uzyskać więcej informacji:
NSNotificationCenter.defaultCenter().postNotificationName("name", object: nil, userInfo:nil)
NSNotificationCenter.defaultCenter().addObserver(self, selector: "method:", name: "name", object: nil)
func method(notification: NSNotification) {
//Do your stuff.
}
Przekazywanie danych za pomocą centrum powiadomień
NSNotificationCenter.defaultCenter().postNotificationName("name", object:nil, userInfo:["message":"Unable to add (homeName) Home"])
func method(notification: NSNotification) {
//Do your stuff.
println(notification.userInfo)
}