从文件读取jpeg失败,并显示“无此文件”,但文件显然存在

时间:2019-07-27 17:49:31

标签: objective-c macos cocoa nsfilemanager

我遇到了从文件系统读取jpeg文件并在NSImage中显示图像的问题。这是一段代码:

    NSError *myError;
    NSString *path = @"file:/Users/jpurlia/Documents/Development/Test/1915brsts880804of.jpg";
    NSURL *url = [NSURL fileURLWithPath:path];
    NSData *data = [NSData dataWithContentsOfURL:url
                                         options:0
                                           error:&myError];
    _photoImageView.image = [[NSImage alloc] initWithData:data];

运行此代码在调用dataWithContentsOfURL时会产生以下错误: 错误域= NSCocoaErrorDomain代码= 260“无法打开文件“ 1915brsts880804of.jpg”,因为没有这样的文件。” 并且,另外: {Error Domain = NSPOSIXErrorDomain代码= 2“没有这样的文件或目录”}

该文件确实存在,并且如果我复制路径并将其粘贴到Web浏览器中,则jpeg图像将按预期显示。 我猜这是存在某种权限问题,可以防止应用程序直接访问文件系统?尝试打开从“打开面板”中选择的文件时,我遇到了类似的问题,事实证明这是从沙箱运行“打开/保存面板”的问题,因此我关闭了沙箱以使我的应用程序正常工作。

这会给任何人敲钟吗?我有点困惑...

1 个答案:

答案 0 :(得分:1)

如果要使用NSURL创建fileURLWithPath,则需要提供路径,而不是URL。删除对file:的使用。

NSString *path = @"/Users/jpurlia/Documents/Development/Test/1915brsts880804of.jpg";
NSURL *url = [NSURL fileURLWithPath:path];

或者您可以修复文件URL并使用NSURL URLWithString。在绝对文件路径之前使用file://,这样您就有3个/

NSString *fileURLString = @"file:///Users/jpurlia/Documents/Development/Test/1915brsts880804of.jpg";
NSURL *url = [NSURL URLWithString:fileURLString];