1

ブックマークが解決されない場合、NSDataブックマークオブジェクトからパスを取得するための最良の方法は何ですか?

通常は、ブックマークを解決し、URLを取得して、すぐに使用できます。ただし、ブックマークが現在存在しないNFSマウントに対するものである場合、それは解決されません。これで、解決されない場所を指しているNSDataがありますが、それがどこを指しているのかわかりません。

これが私が持っているコードブロックで、ブックマークをロードし、それらを解決しようとし、解決が失敗した場合にNSDataをデコードしようとしますが、エンコーディングを理解できません-これも可能ですか?

NSError* error = [[NSError alloc] init];
NSURL* resolvedURL = [NSURL URLByResolvingBookmarkData:bookmarkData 
                                               options:NSURLBookmarkResolutionWithSecurityScope | NSURLBookmarkResolutionWithoutUI 
                                         relativeToURL:nil 
                                   bookmarkDataIsStale:NULL 
                                                 error:&error];
if (resolvedURL) {
    // do some stuff
    ...
} else {
    NSString* msg  = [NSString stringWithFormat:@"Error Resolving Bookmark: %@", error];
    NSLog(msg);
    // the below certainly doesn't get me a path from the bookmark, any idea what will?
    // NSString* path = [[NSString alloc] initWithData:bookmarkData encoding:NSUTF32StringEncoding];
}
4

1 に答える 1

0

エンコーディングを理解したことはありませんが、回避策を見つけました。

もともと、サンドボックス化されたNSURLをNSDataオブジェクトにエンコードし、それらをNSArrayとしてNSDefaultsに保存していました。したがって、解決しない限り、NSDataのパスを判別する方法がありませんでした。

回避策は、デザインを変更することでした。サンドボックス化されたNSURLをエンコードし、URLパスをキーとしてNSDictionaryにオブジェクトとして保存し、NSDefaultsにNSDictionaryを保存します。

このアプローチを使用すると、解決されない場合でも、任意のパスのNSDataを簡単に取得できます。

于 2012-10-19T18:46:02.097 に答える