我有一个启用 Facebook 的 iOS 5 应用程序,它使用故事板和基于 segue 的导航,并且对如何实现“iOS 原生深度链接”感到困惑。改进 iOS 上的应用程序分发中的示例代码仅显示一个UIAlertView
,但我正在尝试启动两个连续的序列操作。
出于这个问题的目的,我已将应用程序简化为三个视图控制器 MYCategoryTableViewController
:MYItemsTableViewController
和MYItemViewController
. 在正常流程中,应用程序打开到MYCategoryTableViewController
,其中显示类别表。当用户选择一个类别时,会有一个MYItemsTableViewController
显示该所选类别的项目表的segue。最后,当一个项目被选中时,会有一个MYItemViewController
显示项目详细视图的 segue。
prepareForSegue
fromMYCategoryTableViewController
在目标视图控制器上设置一个表示该类别的属性:
- (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
fromMYItemsTableViewController
在目标视图控制器上设置一个表示该类别的属性:
- (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];
}
更新: 以编程方式选择 tableview 上的单元格不执行关联的 segue给了我一个想法。也许我只是保存了 urlapplication:openURL:
并让它MYCategoryTableViewController
自然加载。然后在期间viewWillAppear
,调用tableView selectRowAtIndexPath
然后performSegueWithIdentifier
过渡到MYItemsTableViewController
。在 中重复相同的模式,但在调用MYItemsTableViewController
之前清除 url 。performSegueWithIdentifier