Chr*_*ies 11 iphone ipad iphone-sdk-3.2 ios
我已经实现了UIApplicationDelegate
application:didFinishLaunchingWithOptions:
Run Code Online (Sandbox Code Playgroud)
和
application:handleOpenURL:
Run Code Online (Sandbox Code Playgroud)
根据规范,即
application:didFinishLaunchingWithOptions:
returns YES
Run Code Online (Sandbox Code Playgroud)
和
application:handleOpenURL: opens the URL.
Run Code Online (Sandbox Code Playgroud)
该代码在iOS 4下运行(在两种情况下,即,当应用程序启动时以及从暂停状态变为活动状态时).但是,代码在iOS 3.2下不起作用.
Chr*_*ies 33
我回答了自己的问题.找出解决方案花了我一段时间,非常令人沮丧.如果你进行互联网搜索,你会找到一些部分答案,但是我还需要一段时间才能找到以下解决方案,我希望它能增加一些清晰度.
首先,您的应用程序的推荐行为似乎如下(请参阅在iOS Ref Lib中打开支持的文件类型):
applicationDidFinishLaunching:(参见UIApplicationDelegate的注释).application:didFinishLaunchingWithOptions:并检查URL,如果可以打开则返回YES,否则返回NO,但不要打开它.application:handleOpenURL:并打开URL,如果成功则返回YES,否则返回NO.在iOS 4中,将URL传递给应用程序会导致以下两种行为之一:
application:didFinishLaunchingWithOptions:调用并application:handleOpenURL:调用if并application:didFinishLaunchingWithOptions:返回YES.application:didFinishLaunchingWithOptions:不会被调用但会application:handleOpenURL:被调用.但是,在iOS 3.2中,它似乎application:handleOpenURL:从未被调用过!可以在处理URL请求中找到iOS 3.2下行为不同的提示.在那里你会发现,application:handleOpenURL:如果application:didFinishLaunchingWithOptions:没有实现,则被调用,但是applicationDidFinishLaunching:已经实现.但application:handleOpenURL:如果application:didFinishLaunchingWithOptions:实施则不会被调用.
因此,使代码在3.2和4.0下工作的一个解决方案是:
application:didFinishLaunchingWithOptions:,但然后返回NO以防止application:handleOpenURL:被调用.application:handleOpenURL:如果您的版本低于4.0且应用程序处于挂起状态,请打开URL .我在另一篇文章中找到了这个解决方案,但我很困惑,因为它与iOS Ref Lib文档中的建议相矛盾(即我们应该返回YES application:didFinishLaunchingWithOptions:).(那时我没有意识到文件与它自相矛盾).
我相信当前的iOS 4.0行为将是未来的行为我更喜欢以下解决方案:
applicationDidFinishLaunching:.application:didFinishLaunchingWithOptions:并检查URL,如果可以打开则返回YES,否则返回NO,但不要打开它.如果我们在3.2上,请打开URL.application:handleOpenURL:并打开URL,如果成功则返回YES,否则返回NO.总而言之,我实现了iOS 4的行为并添加了以下行 application:didFinishLaunchingWithOptions:
if([[[UIDevice currentDevice] systemVersion] hasPrefix:@"3.2"]) {
[self application:application handleOpenURL:url];
}
__PRE__
applicationDidFinishLaunching:
这使代码在3.2下工作.
application:handleOpenURL: 现已弃用.
从iOS 4.2开始,您可以使用它来打开URL:
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
Run Code Online (Sandbox Code Playgroud)
文档:
| 归档时间: |
|
| 查看次数: |
23584 次 |
| 最近记录: |