iOS 9:如何访问UIApplicationLaunchOptionsURLKey不报错257?
iOS 9: How to access UIApplicationLaunchOptionsURLKey without error 257?
我的 didFinishLaunchingWithOptions
方法存储来自 UIApplicationLaunchOptionsURLKey
的文件名并尝试打开它。
-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
NSURL* url = [launchOptions objectForKey:UIApplicationLaunchOptionsURLKey];
NSError* err;
if ([url checkResourcesIsReachableAndReturnError:&err])
{
...
}
}
对于 iOS 8 此代码工作正常。我的应用程序启动是因为一些其他应用程序选择了 "open in" 到我的应用程序,但是对于 iOS 9 此代码不起作用,我得到
err = NSCocoaErrorDomain : code 257 : "The file 'XXX' couldn't be
opened because you don't have permission to view it."
"The operation couldn't be completed. Operation not permitted"
非常重要的注意事项:只有当我的应用程序关闭而用户试图从另一个应用程序打开文件时才会发生这种情况。我看到在 UIApplicationLaunchOptionsURLKey 中发送的文件确实与我的应用程序不在同一个沙箱中。如果它没有关闭,只是最小化,一切都会正常运行,因为 UIApplicationLaunchOptionsURLKey 位于同一个沙箱中。
这是 iOS 9 beta 3 中的一个问题,已在 beta 4 中解决。
didFinishLaunchingWithOptions 方法是通过位于不同应用程序 space 中的 UIApplicationLaunchOptionsURLKey 中的文件路径触发的,因此它被沙盒化并且 iOS 应用程序无法访问它。
无论如何 Apple 现在解决了这个问题。
我的 didFinishLaunchingWithOptions
方法存储来自 UIApplicationLaunchOptionsURLKey
的文件名并尝试打开它。
-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
NSURL* url = [launchOptions objectForKey:UIApplicationLaunchOptionsURLKey];
NSError* err;
if ([url checkResourcesIsReachableAndReturnError:&err])
{
...
}
}
对于 iOS 8 此代码工作正常。我的应用程序启动是因为一些其他应用程序选择了 "open in" 到我的应用程序,但是对于 iOS 9 此代码不起作用,我得到
err = NSCocoaErrorDomain : code 257 : "The file 'XXX' couldn't be opened because you don't have permission to view it."
"The operation couldn't be completed. Operation not permitted"
非常重要的注意事项:只有当我的应用程序关闭而用户试图从另一个应用程序打开文件时才会发生这种情况。我看到在 UIApplicationLaunchOptionsURLKey 中发送的文件确实与我的应用程序不在同一个沙箱中。如果它没有关闭,只是最小化,一切都会正常运行,因为 UIApplicationLaunchOptionsURLKey 位于同一个沙箱中。
这是 iOS 9 beta 3 中的一个问题,已在 beta 4 中解决。
didFinishLaunchingWithOptions 方法是通过位于不同应用程序 space 中的 UIApplicationLaunchOptionsURLKey 中的文件路径触发的,因此它被沙盒化并且 iOS 应用程序无法访问它。
无论如何 Apple 现在解决了这个问题。