我有一个基于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