2017-12-29 53 views
-3

私はXcodeを使ってCocoa(Objective-C)でmacOSアプリケーションを作成しています。Objective-CでCocoaを使用してファイルを作成できません

私はXcodeの内部で実行ボタンで私のアプリを実行するときに、テキストファイルを作成するために起こるが、問題は、私は、ディレクトリ製品から自分のアプリケーションを実行すると、ファイルが作成されていないということです/リリース/

はそれを持っています権限とは何か?

NSString *[email protected]"Hello world"; 
NSString *[email protected]"test.txt"; 
[sometext writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:NULL]; 
+1

あなたはNSSavePanelを使用し、ユーザが目的地を選択したり、アプリのターゲット機能 –

+0

にAPPサンドボックスをオフにできるようにする必要がありますいくつかのコードを表示します。 – bbum

+0

私のコードを更新しました。単なる基本的な例です。私は最終的に/Users/nubes/Library/Containers/nubes.fr.Proxy-Nubes-Cocoa/Dataのファイルをテストします。実行可能ファイルがどこにあっても、どのように作成できますか? – user3711521

答えて

1

絶対パスを使用していないため、パスはプロセスの現在のディレクトリからの相対パスです。

アプリがサンドボックス化されている場合、カレントディレクトリはアプリサンドボックスの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. 
} 
関連する問題