У меня есть приложение для iOS 5 с поддержкой Facebook, которое использует навигацию на основе раскадровки и перехода, и я не понимаю, как реализовать «собственную глубокую ссылку iOS». Пример кода на странице Улучшение распространения приложений на iOS просто отображает UIAlertView, но я пытаюсь инициировать две последовательные операции.
Для ответа на этот вопрос я упростил приложение до трех контроллеров представления: MYCategoryTableViewController, MYItemsTableViewController и MYItemViewController. В обычном потоке приложение открывается на MYCategoryTableViewController, в котором отображается таблица категорий. Когда пользователь выбирает категорию, происходит переход к MYItemsTableViewController, который отображает таблицу элементов для этой выбранной категории. Наконец, когда элемент выбран, есть переход к MYItemViewController, который отображает подробное представление элемента.
prepareForSegue из MYCategoryTableViewController устанавливает свойство целевого контроллера представления, которое представляет эту категорию:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([[segue identifier] isEqualToString:@"ITEMS_SEGUE"]) {
MYItemsTableViewController *vc = [segue destinationViewController];
MYCategory *mycategory = [self.fetchedResultsController objectAtIndexPath:[self.tableView indexPathForSelectedRow]];
vc.mycategory = mycategory;
}
}
prepareForSegue из MYItemsTableViewController устанавливает свойство целевого контроллера представления, которое представляет эту категорию:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([[segue identifier] isEqualToString:@"ITEM_SEGUE"]) {
MYItemViewController *vc = [segue destinationViewController];
MYItem *myitem = [self.fetchedResultsController objectAtIndexPath:[self.tableView indexPathForSelectedRow]];
vc.myitem = myitem;
}
}
Вопрос: я знаю, что мне нужно что-то реализовать в application:openURL, но не знаю, что делать дальше. Предположим, что входящий URL-адрес предоставляет идентификаторы для поиска объектов MYCategory и MYItem. Я нашел performSegueWithIdentifier, но не уверен, как это взаимодействует с prepareForSegue и как я устанавливаю объекты моей модели в контроллерах представления назначения.
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
// get "target_url" from incoming url
// and parse out MYCategory and MYItem identifiers
// something like this???
[self.window makeKeyAndVisible];
[self.window.rootViewController performSegueWithIdentifier:@"ITEM_SEGUE" sender:self];
return [facebook handleOpenURL:url];
}
Обновление: Выбор программно ячейка в табличном представлении не выполняет связанный переход дала мне идею. Может быть, я просто сохраню URL-адрес из application:openURL: и позволю MYCategoryTableViewController загружаться естественным образом. Затем во время viewWillAppear позвоните tableView selectRowAtIndexPath, а затем performSegueWithIdentifier, чтобы перейти к MYItemsTableViewController. Повторите тот же шаблон в MYItemsTableViewController, но очистите URL перед вызовом performSegueWithIdentifier.