UIApplication的handleOpenURL'返回'到底在哪里?

时间:2010-01-23 02:32:27

标签: iphone cocoa-touch uikit uiapplicationdelegate openurl

我正在处理应用程序中的自定义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属性,然后在“Return YES;”之后创建一个NSDictionary属性从我的rootViewController(或detailViewController - 检索它还没有找到它。如果是这样的触发器是什么?我不清楚handleOpenUrl的回报在哪里......以及它们对我有什么价值。

谢谢!

3 个答案:

答案 0 :(得分:1)

请看一下有关didFinishLaunchingWithOptions

的建议

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

我曾经使用过几种方法传递数据,并根据条件将其混淆。

  1. 保持全球,让您不必担心传球。

  2. 使用通知消息中心,使用带有Notification对象的Observer模式注册/发布数据。

  3. 将网址保存到NSUserDefaults(也是字典,但您无需管理它)。

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

答案 1 :(得分:1)

从其他应用程序或移动safari(非越狱设备)调试openurl的方便提示是子类UIApplication并覆盖一些未记录的方法,抱歉我不记得名字,但你可以在ericasadun.com上挖掘它们,名字将是相当明显的。

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

答案 2 :(得分:0)

我想我可能已经回答了我自己的问题,但如果你有其他的想法,我很乐意听到它们!

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