我有一个基于实用程序模板的应用程序(即主视图控制器和翻转视图控制器)。翻转视图允许选择要在主视图上使用的特定项目。到目前为止 - 效果很好。
现在我尝试添加自定义 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
被设置为startupItem
在mainViewController
.
然后,我在常规方法中添加了一行,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
我应该把我的处理代码放在哪个?或者,我是否以错误的方式接近这一切?这应该在我的模型中处理吗?
与往常一样,提前感谢您的宝贵时间!
盖伊