gpt4 book ai didi

macos - 除非我让用户选择路径,否则保存到路径不起作用

转载 作者:行者123 更新时间:2023-12-03 16:58:09 24 4
gpt4 key购买 nike

我使用此代码告诉我的第二个类将文件保存到给定路径:

if ([defaults boolForKey:@"SaveAutomatically"]) {
basepath = [defaults objectForKey:@"SaveAutomaticallyPath"];
basepath = [basepath stringByAppendingPathComponent:[defaults objectForKey:@"SaveAutomaticallyName"]];
}
[NSThread detachNewThreadSelector:@selector(saveTo:) toTarget:controller withObject:basepath];

因此,saveTo:方法被调用。它首先检查给定的路径是否正确

if (![[[aPath pathExtension] lowercaseString] isEqualToString:@"icns"]) {
aPath = [aPath stringByAppendingPathExtension:@"icns"];
}

if ([[NSFileManager defaultManager] fileExistsAtPath:aPath]) {
[delegate error:@"File exists already."];
[self performSelectorOnMainThread:@selector(fs)
withObject:nil waitUntilDone:NO];
}

然后它做了一些事情并创建了一个 CGImageDestinationRef :

NSURL *fileURL = [NSURL fileURLWithPath:aPath];
CGImageDestinationRef dr = CGImageDestinationCreateWithURL((CFURLRef)fileURL, kUTTypeAppleICNS , count, NULL);
if (!dr) {
[delegate error:@"Unable to save icon file."];
[self performSelectorOnMainThread:@selector(fs)
withObject:nil waitUntilDone:NO];
return;
}

dr 每次都是nil。如果我使用 saveToNSSavePanel 一个路径,它不会提示并且工作正常。我尝试将路径记录在 saveTo: 中,但效果很好(例如/Users/Home/Desktop/Result.icns)。

换句话说,当上面的代码保存到 /Users/Home/Desktop/Result.icns 时它会失败,但是当我让用户决定使用 NSSavePanel 保存到同一路径时,没问题。

我正在使用沙盒。我该如何解决这个问题?

最佳答案

沙盒应用程序在其自己的容器文件夹之外没有文件访问权限,除非用户使用“打开/保存面板”或通过拖放明确允许。您需要允许用户选择他们希望保存的路径,并保留该文件夹的安全范围书签以供以后使用(即,如果您想在应用程序重新启动后更新该文件)。

这里引用 Apple's Sandbox Design Guide :

Your sandboxed app can access file system locations outside of its container in the following three ways:

  • At the specific direction of the user
  • By using entitlements for specific file-system locations (described in “Entitlements and System Resource Access”)
  • When the file system location is in certain directories that are world readable

关于macos - 除非我让用户选择路径,否则保存到路径不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14112247/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com