2010-08-17 159 views
1

說實話,我不知道該怎麼稱呼它,所以我會盡力描述它。是否可以繼承UiApplicationDelegate協議?

UIApplicationDelegate協議有「application:handleOpenURL:」方法。如果我在ApplicationDelegate類中實現這個方法,當有人打開我的url時,它會被調用。

細節: http://developer.apple.com/iphone/library/documentation/uikit/reference/UIApplicationDelegate_Protocol/Reference/Reference.html#//apple_ref/occ/intfm/UIApplicationDelegate/application:handleOpenURL

不過,我想我的其他類(UIViewController的)來接收這個電話。做一個不同的例子 - 你可以創建幾個類,每個類都可以獲得GPS位置。 UIApplicationDelegate協議可以做到這一點嗎?

我在這裏搜索了很多這個主題,但我找不到任何答案。我知道如何獲得我的應用程序委託([[UIApplication sharedApplication]委託]),但在這種情況下情況並非如此。

回答

3

你總是可以告訴某個來自其他面嚮對象語言的objective-c的人,因爲他們的第一本能是子類,子類,子類。 obj-c中沒有很多子類。顯然,你可以,但事實並非如此,特別是與UIApplicationDelegate一樣的事情。 Cocoaish的方式更多的是使用類別,或者有時創建一個新的NSObject子類,其中包含將作爲父類的屬性。

在這種情況下,確定子類是一個壞主意。 UIApplication單例只能有一個委託屬性。所以如果你創建了一個新的UIApplicationDelegate,你就沒有地方可以與之掛鉤了。

取而代之,智能化你的一個代理的application:handleOpenURL:方法來捕獲URL調用並加載任何UIViewController子類(我知道,我知道:異常)將要處理它。

+0

感謝您快速的解答!我認爲我現在明白了正確的做法,但我的情況相當複雜。 我用uiwebview創建了一個uiviewcontroller。我想通過URL調用在uiwebview和我的應用程序之間進行通信(也許它完全錯誤?)。問題是這個uiviewcontroller在視圖層次結構中相當深。所以,在URL調用的那一刻,我已經分配了一些已經分配的視圖。應該處理URL調用的視圖位於屏幕頂部。我希望你能理解並能給我更多的見解。 – Kacper86 2010-08-17 14:16:07

+0

我假設你在UINavigationController中?如果是這樣,你總是可以使用'[self.navigationController viewControllers]'獲取導航堆棧上的視圖控制器數組。這是深入分析視圖層次結構的一種非常快速的方式。然後假設你已經通過公共getter(可能是一個綜合屬性?)提供了你的UIWebView,你可以直接從你的主AppDelegate進行所有你想要的調用。 – 2010-08-17 14:56:07

+0

非常感謝!我有幾個嵌套的UINavigationControllers,所以我使用NSNotification(在我的情況下它更容易一點)。儘管如此,我非常感謝您的幫助! – Kacper86 2010-08-18 14:03:46

1

最簡單的解決方案是使用NSNotification。這將允許您在需要的地方處理handleOpenURL調用,而不會在您的應用程序委託和您想要處理的類之間創建任何不必要的耦合。

在您的應用程序委託中,處理委託方法並使用NSNotificationCenter轉發數據。

- (void)application:(UIApplication *)application handleOpenURL:(NSURL *)URL 
{ 
    [[NSNotificationCenter defaultCenter] postNotificationName:@"MyApplicationHandleOpenURLNotification" object:self userInfo:[NSDictionary dictionaryWithObject:URL forKey:@"URL"]]; 
} 

現在,你需要的地方處理這個問題,簡單地註冊作爲通知的觀察者和拉URL出通知用戶信息字典。

+0

這是一個很好的方法。今天我第一次嘗試了鍵值觀測,這也很容易。比我今天早上建議的那樣更容易挖掘視圖層次結構! – 2010-08-17 20:59:39

+0

謝謝你的迴應!你說得對,這是一個簡單的解決方案。 – Kacper86 2010-08-18 14:05:19

+0

很高興工作。不要忘記更新你的答案。 – 2010-08-18 20:30:39