Ho impostato Core Spotlight nella mia app. Navigazione verso uno specifico controller di visualizzazione all'interno di un controller di navigazione che visualizza una pagina Web di webview basata sul titolo. Così, per esempio:Visualizza una vista ripristinabile da AppDelegate in base al termine di ricerca Core Spotlight
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void(^)(NSArray *restorableObjects))restorationHandler {
if ([[userActivity activityType] isEqualToString:CSSearchableItemActionType]) {
// This activity represents an item indexed using Core Spotlight, so restore the context related to the unique identifier.
// The unique identifier of the Core Spotlight item is set in the activity’s userInfo for the key CSSearchableItemActivityIdentifier.
NSString *uniqueIdentifier = [userActivity.userInfo objectForKey:CSSearchableItemActivityIdentifier];
NSString *valueForUID = [self valueForKey:uniqueIdentifier];
self.tabBar = (UITabBarController *)self.window.rootViewController;
self.tabBar.selectedIndex = 0;
UINavigationController *selectedNav=(UINavigationController *)self.tabBar.selectedViewController;
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
WebViewController *webVCVC = [storyboard instantiateViewControllerWithIdentifier:@"WebViewController"];
webVC.title = uniqueIdentifier;
webVC.titleDetail = valueForUID;
[selectedNav presentViewController:webVC animated:YES completion:nil];
}
}
In breve, il webVC carica una pagina Web specifica basata su di essa la self.title e titleDetail, questi valori cambiano perché ogni riflettori ID univoco è diverso.
Il problema non è se il primo indice Spotlight è selezionato, tutto funziona correttamente. tuttavia, se seleziono il nuovo pulsante 'Back To% @' e tornare a Spotlight per selezionare un nuovo tema, ottengo il seguente errore:
Warning: Attempt to present <WebViewController: 0x7fced37c8be0> on <UINavigationController: 0x7fced403fa00> whose view is not in the window hierarchy!
così ho pensato tutto quello che dovevo fare era chiudere la visualizzazione corrente ogni volta e ricaricarlo:
self.tabBar = (UITabBarController *)self.window.rootViewController;
self.tabBar.selectedIndex = 0;
UINavigationController *selectedNav=(UINavigationController *)self.tabBar.selectedViewController;
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
WebViewController *webVC = [storyboard instantiateViewControllerWithIdentifier:@"WebViewController"];
[webVC dismissViewControllerAnimated:NO completion:^{
webVC.title = pubNum;
webVC.titleString = pubTitle;
[selectedNav presentViewController:webVC animated:YES completion:nil];
}];
Questo non lavoro neanche, ottengo il seguente avviso/errore:
Attempting to load the view of a view controller while it is deallocating is not allowed and may result in undefined behavior
Il che ha senso. Come posso aggirare questo in questa particolare istanza?
Qualsiasi corpo sa come aiutare? –
hai provato con 'presentedViewController' per scoprire se c'è già una vista presentata modalmente e chiuderla? –
Anche se ho trovato se uno è presente e lo congedo, ho ancora lo stesso problema. Mi permetterebbe di caricare la stessa vista che stia dislocando. Quindi immagino che la vera domanda sia, come caricare la vista dopo la sua riallocazione o migliore, come sapere quando un deallocate è completo @maty_nz –