絶対パスを使用していないため、パスはプロセスの現在のディレクトリからの相対パスです。
アプリがサンドボックス化されている場合、カレントディレクトリはアプリサンドボックスのData
ディレクトリです。しかし、あなたの症状から、あなたのアプリはサンドボックスされていないと思います。
アプリがではなく、がサンドボックスであり、Xcodeから実行している場合、現在のディレクトリはアプリを含むディレクトリです(例:/Users/mayoff/Library/Developer/Xcode/DerivedData/test-aegotyskrtnbeabaungzpkkbjvdz/Build/Products/Debug
)。あなたのユーザIDはこのディレクトリにファイルを作成する権限を持っているので、あなたのコードはXcodeからアプリケーションを実行するときに動作します。
ではなく、がサンドボックスであり、Finderでダブルクリックして実行すると、現在のディレクトリはルートディレクトリ(/
)です。ユーザーIDには(通常)このディレクトリにファイルを作成する権限がありません。そのため、Finderからアプリケーションを実行するとコードが失敗します。
NSSavePanel
を使用してファイルの書き込み先をユーザーに選択させるか、ユーザーのドキュメントフォルダなどの書き込みアクセス権があることを知っているディレクトリにファイルを書き込む必要があります。ここではドキュメントフォルダに書き込むためのいくつかのコードです:
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を使用し、ユーザが目的地を選択したり、アプリのターゲット機能 –
にAPPサンドボックスをオフにできるようにする必要がありますいくつかのコードを表示します。 – bbum
私のコードを更新しました。単なる基本的な例です。私は最終的に/Users/nubes/Library/Containers/nubes.fr.Proxy-Nubes-Cocoa/Dataのファイルをテストします。実行可能ファイルがどこにあっても、どのように作成できますか? – user3711521