2010-08-17 114 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