1

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

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

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

我所知道的只是applicationDidFinishLaunching之前完成handleOpenURL并且看起来好像我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;”之后 从我的rootViewController(或detailViewController- 尚未解决)中检索它。如果是这样,触发器是什么?我不清楚handleOpenUrl 的回报将走向何方……以及它们对我有什么价值(如果有的话)。

谢谢!

4

3 回答 3

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 检索数据。

于 2010-01-23T02:53:49.700 回答
1

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

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

于 2010-01-23T10:59:23.753 回答
0

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

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

于 2010-01-23T02:53:20.103 回答