ストーリーボードとセグエ ベースのナビゲーションを使用する Facebook 対応の iOS 5 アプリがあり、「iOS ネイティブ ディープ リンク」の実装方法について混乱しています。Improving App Distribution on iOSのサンプル コードでは、a が表示されるだけですが、 UIAlertView2 つの連続したシーク操作を開始しようとしています。
この質問の目的のために、アプリケーションを 3 つのビュー コントローラーに簡略化し ましMYCategoryTableViewControllerた。通常のフローでは、アプリケーションが開き、カテゴリのテーブルが表示されます。ユーザーがカテゴリを選択すると、その選択したカテゴリの項目の表を表示するセグエがあります。最後に、アイテムが選択されると、アイテムの詳細ビューを表示するセグエがあります。MYItemsTableViewControllerMYItemViewControllerMYCategoryTableViewControllerMYItemsTableViewControllerMYItemViewController
prepareForSeguefromは、その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;
}
}
prepareForSeguefromは、その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ます。