私のココア アプリでは、次のコードを使用して、NSOpenPanel から取得した NSURL からセキュリティ スコープのブックマークを作成します。
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) では、外部ドライブがマウントさnil
れていない場合、Mavericks のようにブックマークの解像度が戻りません。代わりに、Macintosh HD を指す URL を返します (つまり[myURL path]
、文字列 を返します@"/"
)。今回の件で気付きましたisStale==YES
。
他の誰かが同じ問題を経験しましたか? これは Yosemite の既知のバグですか、それともそのようなケースを処理するための追加の手順が不足していますか? 回避策はありますか?