【问题标题】:How to handle a custom URL in an already-open app?如何在已打开的应用程序中处理自定义 URL?
【发布时间】: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


    【解决方案1】:

    我会看一下 UIApplicationDelegate 协议的文档,特别是;

    - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
    

    而这已被弃用。

    - (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
    

    【讨论】:

      【解决方案2】:

      绝对不是在应用程序启动时只被调用一次的方法!您需要在自己的方法中重构项目处理代码,然后在每次调用时从 viewDidLoad(启动期间一次)和 handleOpenURL 调用此方法。

      【讨论】:

      • 已经重构为自己的函数,但希望有一个单点调用(类似于 Windows Focus 事件的效果)。
      猜你喜欢
      • 1970-01-01
      • 2012-12-03
      • 1970-01-01
      • 2022-08-13
      • 2022-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-03
      相关资源
      最近更新 更多