我有一个基于Utility模板的应用程序(即Main和Flip视图控制器)。翻转视图允许选择要在主视图上使用的特定项目。到目前为止 - 效果很好。
现在我尝试添加自定义网址。一些效果:myapp://itemID=40
基本上会告诉主视图:“无需翻转 - 你将处理第40项。”
我将网址类型方案注册为“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
设置为startupItem
中名为mainViewController
的媒体资源。
然后我在常规application
方法中添加了一行,以验证在没有网址的情况下startupItem
将是nil
:
- (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
我应该处理我的处理代码?或者,我是否以错误的方式接近这一切?应该在我的模型中处理吗?
一如既往,提前感谢您的时间!
盖
答案 0 :(得分:3)
我会看一下UIApplicationDelegate协议的文档,特别是
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
这是不推荐使用的。
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
答案 1 :(得分:1)
绝对不是在应用程序启动时只调用一次的方法!您需要在自己的方法中重构项处理代码,然后从viewDidLoad(启动期间一次)调用此方法,并在每次调用它时调用handleOpenURL。