Iphone 在应用程序中打开,从启动选项获取UIApplicationLaunchOptionsURLKey

Iphone 在应用程序中打开,从启动选项获取UIApplicationLaunchOptionsURLKey,iphone,objective-c,ios,ios4,Iphone,Objective C,Ios,Ios4,我正在尝试在我的应用程序中打开一个.pdf文件。我修改了Info.plist,以便在我的应用程序中打开.pdf 我使用以下代码: - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window.rootViewController = self.viewController; [self.window

我正在尝试在我的应用程序中打开一个.pdf文件。我修改了Info.plist,以便在我的应用程序中打开.pdf

我使用以下代码:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window.rootViewController = self.viewController;
    [self.window makeKeyAndVisible];
    thePDFurl = (NSURL *)[launchOptions valueForKey:UIApplicationLaunchOptionsURLKey];
    return YES;
}
在另一个类中,我的appDelegate(包含
完成了使用选项启动的操作)有一行代码:

appDel = [[UIApplication sharedApplication]delegate];
[theLabel setText:[NSString stringWithFormat:@"%@", appDel.thePDFurl]];

不知何故,标签总是显示(null)。我缺少什么?

您可以保留pdfurl变量,也可以使用该方法从NSURL获取绝对字符串值


我可能误解了你的意图。如果是,请忽略

如果您希望用户能够使用您的应用程序“打开…”PDF,您可以实现

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
例如


我很确定这对启动应用程序和调用应用程序都有效(即,如果它已经在后台)

我想你是对的。恰好在方法ApplicationIDFinishLaunching完成之前加载了视图。感谢所有…

当您在
应用程序中调用时:使用选项完成启动:

self.window.rootViewController = self.viewController;
[self.window makeKeyAndVisible];

[viewController view]
被隐式调用,并且没有
appDel。尚未分配PDF URL

使用
absoluteString
恐怕不起作用。我还将启动更改为
thePDFurl=[(NSURL*)[launchOptions-valueForKey:uiapplicationaunchoptionsurlkey]retain],无效。有什么想法吗?你得用吸气剂。尝试self.pdfurl=(NSURL*)[launchOptions-valueForKey:uiapplicationaunchoptionsurlkey]retain];或者在声明变量的属性时使用retain。如果您使用选项:方法在didFinishLaunchingWithOptions:method中打印它,则DFURL将显示正确的值?我不知道,我无法记录它,因为必须在此应用中打开邮件附件。这意味着我不能通过XCode运行它。我确实做了
test=[nsstringwithformat:@“%@”,thePDFurl]
在didFinishLaunchingWithOptions中,尝试了
[label setText:appDel.test]
,结果是一个空的(不是
(null)
,没有任何内容)标签..?不相关,但使用
NSDictionary
对象forkey:
而不是
NSKeyValueCoding
值forkey:
。嗨,我可以使用“Open with..”,我可以用它打开我的应用程序的PDF。出现的问题是,didFinishLaunching的文件路径在我看来似乎为空。虽然选项是(null)……考虑接受一个提供的答案,而不是发布一个准答案,说未来提供的答案是正确的。事实上,我发现自己的答案可能对其他人有用。在这种情况下,它会提醒用户视图是在方法ApplicationIDFinishLaunching完成之前加载的。如果人们有类似的问题,这可能会有所帮助。尽管如此,作为答案输入到本页面的每一条建议性反馈都被投了赞成票。他们仍然比我自己的答案高。。。
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
    NSLog(@"Open URL:\t%@\n"
     "From source:\t%@\n"
     "With annotation:%@",
     url, sourceApplication, annotation);

    NSString *filepath = [url path];
    //...
    return YES;
}
self.window.rootViewController = self.viewController;
[self.window makeKeyAndVisible];