Yosemite中外部驱动器的NSURL书签分辨率失败

时间:2014-11-27 16:32:27

标签: cocoa usb nsurl security-scoped-bookmarks

在我的cocoa应用程序中,我使用以下代码从NSURL创建一个安全范围的书签,我从NSOpenPanel获取:

NSData *bookmarkData=[myURL bookmarkDataWithOptions:([NSURL instancesRespondToSelector:@selector(startAccessingSecurityScopedResource)] ? NSURLBookmarkCreationWithSecurityScope : 0) includingResourceValuesForKeys:(&NSURLPathKey==NULL ? [NSArray arrayWithObjects:NSURLVolumeIsLocalKey,nil] : [NSArray arrayWithObjects:NSURLPathKey,NSURLVolumeIsLocalKey,nil]) relativeToURL:nil error:&error];

并解决它,我使用:

BOOL isStale;
myURL=[NSURL URLByResolvingBookmarkData:bookmarkData options:options relativeToURL:nil bookmarkDataIsStale:&isStale error:nil];

在Mac OS X Mavericks(10.9)中,当我为外部驱动器(如USB记忆棒)创建书签时,此功能正常。但是在Yosemite(10.10)中,如果未安装外部驱动器,则书签分辨率不会像在Mavericks中那样返回nil。相反,它返回指向Macintosh HD的URL(即[myURL path]返回字符串@"/")。我注意到在这种情况下isStale==YES

其他人是否遇到过同样的问题?这是Yosemite中的一个已知错误还是我错过了处理这种情况的一些额外步骤?有解决方法吗?

1 个答案:

答案 0 :(得分:0)

此错误似乎在Mac OS X El Capitan中得到解决。