无法使用带有Objective-C的Cocoa创建文件

无法使用带有Objective-C的Cocoa创建文件,objective-c,xcode,cocoa,Objective C,Xcode,Cocoa,我正在使用Xcode创建一个带有Cocoa(Objective-C)的macOS应用程序 当我在Xcode中运行应用程序时,我碰巧创建了一个文本文件,但问题是,当我从Products/Release目录运行应用程序时,没有创建该文件/ 这与权限有关吗 NSString *sometext=@"Hello world"; NSString *path=@"test.txt"; [sometext writeToFile:path atomically:YES encoding:NSUTF8Stri

我正在使用Xcode创建一个带有Cocoa(Objective-C)的macOS应用程序

当我在Xcode中运行应用程序时,我碰巧创建了一个文本文件,但问题是,当我从Products/Release目录运行应用程序时,没有创建该文件/

这与权限有关吗

NSString *sometext=@"Hello world";
NSString *path=@"test.txt";
[sometext writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:NULL];

因为您没有使用绝对路径,所以该路径是相对于进程的当前目录的

如果您的应用程序是沙盒,则当前目录是应用程序沙盒的
数据
目录。但我想,从你的症状来看,你的应用程序不是沙盒

如果您的应用程序是沙盒,并且您从Xcode运行它,那么它的当前目录就是包含该应用程序的目录(例如,
/Users/mayoff/Library/Developer/Xcode/DerivedData/test aegotyskrtnbeabaungzpkkbjvdz/Build/Products/Debug
)。您的用户id具有在此目录中创建文件的权限,因此当您从Xcode运行应用程序时,您的代码可以正常工作

如果您的应用程序未处于沙盒状态,并且您在Finder中双击它来运行它,那么它的当前目录就是根目录(
/
)。您的用户id(通常)无权在此目录中创建文件,因此当您从Finder运行应用程序时,代码将失败

您应该让用户使用
NSSavePanel
选择写入文件的位置,或者您应该将文件写入您知道有写入权限的目录,如用户的文档文件夹。下面是一些要写入Documents文件夹的代码:

NSURL *documentDirectoryUrl = [NSFileManager.defaultManager URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:YES error:nil];
NSURL *fileUrl = [documentDirectoryUrl URLByAppendingPathComponent:@"test.txt"];
NSString *someText = @"Hello world";
NSError *error;
if (![someText writeToURL:fileUrl atomically:YES encoding:NSUTF8StringEncoding error:&error]) {
    // Error occurred. Details are in the error object.
}

你需要使用NSSavePanel并允许用户在你的应用程序目标功能中选择目标或关闭应用程序沙盒显示一些代码。我更新了我的代码,这只是一个基本示例。最后,我在/Users/nubes/Library/Containers/nubes.fr.Proxy-nubes-Cocoa/Data中测试了文件,我如何在可执行文件所在的位置创建它?这只是一个基本的例子,说明我们甚至不理解为什么要对应用程序进行沙箱处理。