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