我有一個基於Utility模板的應用程序(即Main和Flip視圖控制器)。翻轉視圖允許選擇要在主視圖上使用的特定項目。到目前爲止 - 效果很好。如何在已打開的應用程序中處理自定義網址?
現在我試着添加一個自定義的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
被設置爲在mainViewController
稱爲startupItem
財產。
我加入一行到正規application
方法來驗證startupItem
將nil
在任何URL的情況下:
- (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
應該放入我的處理代碼?或者,我是否以錯誤的方式接近了這一切?這應該在我的模型中處理?
一如既往,在此先感謝您的時間!
Guy
已經重構爲其自己的功能,但希望有一個單一的調用點(對Windows焦點事件的影響)。 – 2011-04-07 07:02:45