说实话,我不知道怎么称呼它,所以我会尝试描述它。
UIApplicationDelegate协议有“application:handleOpenURL:”方法。如果我在我的ApplicationDelegate类中实现此方法,当有人打开我的URL时会调用它。
但是,我希望我的其他课程(uiviewcontroller)接收此电话。举一个不同的例子 - 你可以创建一些类,每个类都可以获得GPS位置。是否可以使用UIApplicationDelegate协议执行相同的操作?
我在这里搜索了很多这个主题,但我找不到任何关于如何做的答案。我知道如何获取我的应用程序委托([[UIApplication sharedApplication]委托]),但在这种情况下并非如此。
答案 0 :(得分:3)
你总是可以告诉那些从其他面向对象语言来到objective-c的人,因为他们的第一直觉是子类,子类,子类。 obj-c中没有很多子类。显然,你可以,但事情并非如此,特别是像UIApplicationDelegate这样的事情。 Cocoaish Way使用类别的次数越多,或者有时候创建一个新的NSObject子类,其中包含可能的父类作为属性。
在这种情况下,确保子类化是一个坏主意。 UIApplication单例只能有一个委托属性。因此,如果你创建一个新的UIApplicationDelegate,你就没有地方可以使用它了。
相反,智能化你的一个委托的application:handleOpenURL:
方法来捕获URL调用并加载任何UIViewController子类(我知道,我知道:例外)将处理它。
答案 1 :(得分:1)
最简单的解决方案是使用NSNotification。这将允许您在需要的任何地方处理handleOpenURL调用,而不会在您的应用程序委托和您要处理它的类之间创建任何不必要的耦合。
在您的app delegate中,处理委托方法并使用NSNotificationCenter转发数据。
- (void)application:(UIApplication *)application handleOpenURL:(NSURL *)URL
{
[[NSNotificationCenter defaultCenter] postNotificationName:@"MyApplicationHandleOpenURLNotification" object:self userInfo:[NSDictionary dictionaryWithObject:URL forKey:@"URL"]];
}
现在,无论您需要处理此问题,只需注册为通知的观察者,并将URL从通知用户信息字典中拉出。
答案 2 :(得分:1)
根据您对Dan Ray的回答的评论,听起来您正在寻找类似Three20's URL-based navigation
的内容