0

誰のユーザー名も含む一定のファイル パスを定義したい (たとえば/Users/username/Desktop、私の特定のケースでは、 で作成したディレクトリです/var/spool/FolderICreate/username)。

他のクラスが認識できるように、この定数を宣言する最良の方法は何ですか? 現在、グローバルを表示する必要があるクラスに含める globals.h ファイルがありますが、値を設定する方法がわかりません。 #define明らかにハードコードされた文字列リテラルが必要であり、 を使用して文字列を設定できるかどうか、またはどのように設定するかはわかりませんextern const NSString*。これは難しいことではないと思いますが、途方に暮れています。

- 編集 -

人々が正しく指摘したように、 などでユーザー名を取得できるため、私のコードは不要だったのでNSUserName、削除しました。しかし、人々は私の質問の要点を見落としていると思います。必要なパス名を取得するには複数の方法があることがわかります。それを定数として宣言するにはどうすればよいですか?

4

4 に答える 4

3

改訂された質問に対して、Kaelin が指摘しているように、定数は必要ありません。C の定数はコンパイル時に定義されるものであり、コンパイル時に値が何であるかはわかりません。

この問題には変数は必要ありません。静的関数が必要です。Foundation は、あなたが望むものと同様のことを行う多くを提供します。他のものが必要な場合は、独自の静的関数を作成してくださいMYDirectoryForStuff()

非定数グローバル変数を作成しないでください。その方法は狂気です。次に、それらが使用される前に初期化されることを確認する必要があります。これは、あらゆる種類の微妙なバグにつながります. 静的関数を使用すると、簡単に自己初期化できます。

于 2012-07-19T21:09:17.037 に答える
2

Foundationフレームワークですでに提供されている一連の機能を再実装する前に、NSPathUtilitiesを確認してください。あなたがやろうとしていることのために特別にそこにたくさんの方法があります。

あなたが実際に尋ねた質問に答えるために、変数を定数として宣言し、実行時にその値を変更する簡単な方法はありません...そのようなものは、コンパイラに定数であると伝える目的を無効にします。ヘッダーファイルで変数をとして宣言し、extern NSString *一度だけ設定するだけです。:-)

于 2012-07-19T20:56:22.660 に答える
2

ユーザーのホームフォルダがどこにあるかについては、絶対に想定しないでください。

現在のユーザーのホームフォルダへのパスを取得する正しい方法は次のとおりです。

NSHomeDirectory()

ユーザーのホームフォルダーの標準サブフォルダーの1つにアクセスする場合は、それらの場所についても想定せずに、次を使用します。

NSSearchPathForDirectoriesInDomain()

それらを取得します。たとえば、ドキュメントフォルダを取得するには:

NSArray *searchPaths = NSSearchPathForDirectoriesInDomain(
    NSDocumentDirectory, 
    NSUserDomainMask, 
    YES
);
NSLog(@"The documents folder is at %@", [searchPaths objectAtIndex:0]);
于 2012-07-19T20:57:37.837 に答える
0

Foundationフレームワークには、このための機能がありますNSUserName()

于 2012-07-19T20:55:31.293 に答える