存储为NSData的URL书签的编码是什么?

时间:2012-10-10 18:36:01

标签: macos cocoa sandbox

如果书签无法解析,从NSData书签对象获取路径的最佳方法是什么?

通常情况下,您只需解析书签,获取网址,然后离开。但如果书签是指当前不存在的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];
}

1 个答案:

答案 0 :(得分:0)

我从未弄清楚编码,但我找到了解决方法。

最初,我将沙盒NSURL编码为NSData对象,然后将它们作为NSArray存储在NSDefaults中。因此,我无法确定NSData的路径,除非它能解决。

解决方法是更改​​设计 - 现在我对沙盒NSURL进行编码,将其作为对象存储到NSDictionary中,其中键是URL路径,并将NSDictionary存储在NSDefaults中。

使用这种方法,我可以轻松地检索任何给定路径的NSData,即使它无法解析。