【问题标题】:Where does UIApplication's handleOpenURL 'Return' to exactly?UIApplication 的 handleOpenURL “返回”到底在哪里?
【发布时间】:2010-01-23 02:32:26
【问题描述】:

我正在处理应用程序中的自定义 URL 方案,并试图解决:

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

我在我的应用程序中将 URL 传递并成功解析为 NSDictionary,但想知道“现在怎么办?” handleOpenURL 返回一个 BOOL 但返回什么?我很难调试,因为我还没有弄清楚如何让调试器在触发时在设备上运行。

我只知道applicationDidFinishLaunchinghandleOpenURL 之前完成,并且看起来好像我的rootViewController 在屏幕上。

- (void)applicationDidFinishLaunching:(UIApplication *)application {
    // Load data
    [self initializeData]; 
    // Configure and show the window
    [window addSubview:[navigationController view]];    
    [window makeKeyAndVisible];
}

无论如何,现在我的 appDelegate 中有这个 NSDictionary 对象,你如何将它传递给 rootViewController 以便它可以在其详细视图中对其进行处理?我会打电话吗

[[navigationController topViewController] addItemWithDictionary:theDictionary];

在handleOpenURL 的return YES; 之前或者,我应该在我的appDelegate 中创建一个NSDictionary 属性,然后在“返回YES;”之后从我的rootViewController (或detailViewController - 尚未确定哪个)中检索它。如果是这样,触发器是什么?我不清楚 handleOpenUrl 的回报将走向何方……以及它们对我有什么价值(如果有的话)。

谢谢!

【问题讨论】:

    标签: iphone cocoa-touch uikit uiapplicationdelegate openurl


    【解决方案1】:

    看看这里关于 didFinishLaunchingWithOptions 的建议

    http://www.iphonedevsdk.com/forum/iphone-sdk-development/31742-handleopenurl-not-called.html

    我使用了几种方法来传递数据,并且根据条件我将它们混合在一起。

    1. 保持全局,这样您就不必担心传递。

    2. 通过使用通知消息中心的通知对象,使用观察者模式注册/发布您的数据。

    3. 将 URL 保存到 NSUserDefaults(也是一个字典,但您不必管理它)。

    最近我不得不在 UIWebView 和过滤一些 URL 数据的处理上做类似的事情。我不得不在 NSURL 上继承 WebViewCache 和 setSharedCache。我强烈怀疑这也适用于您的问题,方法是使用 shouldStartLoadWithRequest 检索数据。

    【讨论】:

    • 非常有帮助,谢谢!但我仍在寻找究竟是谁(或什么)在调用handleOpenURL 的答案,返回值 YES 或 NO 对调用对象有什么影响?从我的应用程序的角度来看,似乎没有任何区别......
    【解决方案2】:

    从其他应用程序或移动 safari(非越狱设备)调试 openurl 的一个方便技巧是子类化 UIApplication 并覆盖一些未记录的方法,抱歉我不记得临时名称但你可以在 ericasadun.com 上挖掘它们,这些名称会很明显。

    当您通过 xcode 启动应用程序并点击主页跳板时不会终止该进程,因为它是由 xcode (afaik) 启动的,因此您可以启动其他应用程序并在仍连接到调试器的同时调用 openurl。

    【讨论】:

      【解决方案3】:

      我想我可能已经回答了我自己的问题,但如果您有其他想法,我很想听听!

      我认为我需要继续在 handleOpenURL 中进行处理并将字典转换为一个对象,然后将其添加到我的 appDelegate 的数组中,rootViewController 正在使用该数组来构建它的表视图。显然需要在自动填充数组之前对用户进行一些验证和确认。我想这也会发生在 handleOpenURL 的范围内?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-02-26
        • 2012-03-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-08
        • 1970-01-01
        • 2011-09-19
        相关资源
        最近更新 更多