我正在处理应用程序中的自定义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;”之后创建一个NSDictionary属性从我的rootViewController
(或detailViewController
- 检索它还没有找到它。如果是这样的触发器是什么?我不清楚handleOpenUrl的回报在哪里......以及它们对我有什么价值。
谢谢!
答案 0 :(得分:1)
请看一下有关didFinishLaunchingWithOptions
的建议http://www.iphonedevsdk.com/forum/iphone-sdk-development/31742-handleopenurl-not-called.html
我曾经使用过几种方法传递数据,并根据条件将其混淆。
保持全球,让您不必担心传球。
使用通知消息中心,使用带有Notification对象的Observer模式注册/发布数据。
将网址保存到NSUserDefaults(也是字典,但您无需管理它)。
最近我不得不在UIWebView上做类似的事情以及过滤一些URL数据的处理。我不得不在NSURL上继承WebViewCache和setSharedCache。我强烈怀疑这也适用于您的问题,方法是使用shouldStartLoadWithRequest检索数据。
答案 1 :(得分:1)
从其他应用程序或移动safari(非越狱设备)调试openurl的方便提示是子类UIApplication并覆盖一些未记录的方法,抱歉我不记得名字,但你可以在ericasadun.com上挖掘它们,名字将是相当明显的。
当您通过xcode启动应用程序并点击主页跳板时不会终止该进程,因为它是由xcode(afaik)启动的,因此您可以启动其他应用程序并在仍然连接到调试器时调用openurl。
答案 2 :(得分:0)
我想我可能已经回答了我自己的问题,但如果你有其他的想法,我很乐意听到它们!
我想我需要继续处理handleOpenURL并将字典转换为一个对象,然后将其添加到我的appDelegate的数组中,rootViewController用它来构建它的表视图。显然需要进行一些验证和在自动填充数组之前确认用户的部分。我想这也会发生在handleOpenURL的范围内?