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

标签 macos cocoa sandbox

如果书签无法解析,从 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];
}

最佳答案

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

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

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

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

关于macos - 存储为 NSData 的 URL 书签的编码是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12826091/

相关文章:

macos - 回合制游戏的默认玩家人数? (操作系统)

java - Jenv - 多次添加相同的 Java 版本

objective-c - 字体渲染不佳(Cocoa - Mac)

iphone - 在没有许可证的 iPhone 模拟器上测试

macos - Mac OS X 应用程序可以阻止 dlopen 加载库吗?

swift - macOS 上的 kIOPSCurrentCapacityKey 是否有等效的电池电量更改通知?

cocoa - Xcode 构建选项等教程

python - 如何安装 libsandbox?我在安装过程中遇到一些问题

gcc - 加载共享库时出错 : libsandbox. 所以

xcode - 如何将沙盒应用程序添加到登录项