【发布时间】:2011-04-07 06:37:30
【问题描述】:
我有一个基于实用程序模板的应用程序(即主视图控制器和翻转视图控制器)。翻转视图允许选择要在主视图上使用的特定项目。到目前为止 - 效果很好。
现在我尝试添加自定义 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 方法中添加了一行,以验证在没有 URL 的情况下 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?或者,我是否以错误的方式接近这一切?这应该在我的模型中处理吗?
一如既往,提前感谢您的宝贵时间!
男人
【问题讨论】:
标签: iphone objective-c uiviewcontroller custom-url