2011-04-07 96 views
0


我有一個基於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方法來驗證startupItemnil在任何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

回答

1

絕對不是在應用程序啓動時只調用一次的方法!您需要在自己的方法中重構項目處理代碼,然後在viewDidLoad(在啓動過程中調用一次)和handleOpenURL(每次調用它時調用此方法)中調用此方法。

+0

已經重構爲其自己的功能,但希望有一個單一的調用點(對Windows焦點事件的影響)。 – 2011-04-07 07:02:45

3

我會看看UIApplicationDelegate協議的文檔,特別是;

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation 

而這已被棄用。

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url 
相關問題