ユーティリティ テンプレート (つまり、メインおよびフリップ ビュー コントローラー) に基づくアプリがあります。フリップ ビューでは、メイン ビューで使用する特定のアイテムを選択できます。これまでのところ - うまくいきます。
カスタム URL を追加してみました。効果のあるもの:myapp://itemID=40
これは基本的にメイン ビューに「フリップする必要はありません - アイテム 40 を扱うことになります」と伝えます。
URL タイプ スキームを " myapp
" として登録し、アプリ デリゲートに次のメソッドを追加しました。
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
if (!url) {
return NO;
}
NSString *urlString = [url absoluteString];
NSLog(@"URL received: %@", urlString);
NSString *itemID = [urlString stringByReplacingOccurrencesOfString:@"myapp://itemID=" withString:@""];
NSLog(@"Item received: %@", itemID);
[_mainViewController setStartupItem:itemID];
return YES;
}
ご覧のとおり、itemID
は で呼び出されるプロパティに設定されていstartupItem
ますmainViewController
。
次に、通常のapplication
メソッドに1 行追加して、URL がない場合の動作を確認しstartupItem
ます。nil
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
//Make sure URL string is empty
[_mainViewController setStartupItem:nil];
// Override point for customization after application launch.
// Add the main view controller's view to the window and display.
self.window.rootViewController = self.mainViewController;
[self.window makeKeyAndVisible];
return YES;
}
そして、MainViewController.m で、アイテムをviewDidLoad
イベントに処理するコードを追加しました。
そして、ここに私の問題があります。このスキームは、アプリが初めて URL から開始された場合にうまく機能します。すでに実行されている場合は、二度と到達viewDidLoad
しないため、その特定のアイテムを処理しませんが、何も渡されなかったかのように続行します。
私の謙虚な質問はUIViewController
、処理コードをどちらに入れる必要があるかということです。または、私はこれらすべてに間違った方法でアプローチしていますか? これは私のモデルで処理する必要がありますか?
いつものように、お時間をいただきありがとうございます。
男