0

私は Mac アプリを開発しており、設定 (文字列の配列) をファイルに入れたいと考えています。そのファイルがアプリと同じフォルダーに存在する場合、それが読み取られ、既定の設定が上書きされます。

ファイルの書き込みに問題はありませんが、コードで読み取る場合:

NSArray* settingsInput = [[NSArray alloc] initWithContentsOfFile:@"./SettingsFile"];

何か奇妙なことが起こります。XCode からアプリを実行すると (設定ファイルはアプリの隣のビルド/デバッグ フォルダーにあります)、設定は問題なく読み込まれます。アプリをアーカイブしてデスクトップから実行すると、ファイルを読み込めません。アプリをビルド フォルダーからデスクトップにコピーしても機能しません。

この種の行動の理由は何でしょうか?このファイルを読むにはどうすればよいですか?

4

3 に答える 3

3

通常の優遇制度を利用する方が良いかもしれません。NSUserDefaults。

いくつかの方法があります。しかし、アイデアは、アプリに一連のデフォルトの設定を与えることです。これらは、正しいドメインに登録され、常に新しいアプリで登録されます.

registerDefaultsの使用: NSUserDefaultsから。

Apples のドキュメント NSUserDefaultsとその # registerDefaultsを参照してください

しかし、私が使用するものは次のとおりです。

plist ファイルを Xcode プロジェクトのサポート ファイルにコピーします。

ここに画像の説明を入力

「コピー先グループのフォルダーにファイルをコピーする」がチェックされていることを確認します。そして、「ターゲットに追加もチェック」

ここに画像の説明を入力

plist ファイルには、文字列の配列が含まれている必要があります。

ここに画像の説明を入力

(私は自分のものを作成しました。ユーザー設定で別のplistを複製して、名前を変更します。プロジェクトにコピーします。選択して、必要に応じて編集します。ファイルメニューを使用していることを確認します->「保存」して変更を保存します. )

宣言するNSUserDefaults * prefs;

ここに画像の説明を入力

アプリの - (id)init メソッドで。ファイルの内容をデフォルト設定として登録します。

- (id)init
{
    self = [super init];
    if (self) {


        prefs = [NSUserDefaults standardUserDefaults] ;
        NSString *registerDefaultsPlistFile= [[NSBundle mainBundle] pathForResource:@"registerDefaults" ofType:@"plist"];
  [prefs registerDefaults:[NSDictionary dictionaryWithContentsOfFile: registerDefaultsPlistFile]];


    }
    return self;
}

これらの設定を読み取るために、後で電話をかけることができます。

 NSLog(@" arrayOfStrings =   %@",  [prefs objectForKey:@"arrayOfStrings" ]);

これらのデフォルト設定は、変更しない限り、file/out に書き込まれません。ファイルへの書き込みとは、アプリケーションの設定ファイルへの書き込みを意味します。それらに変更を加えると、それらはユーザー設定に書き出され、それ以降使用されます。

于 2013-09-20T10:17:13.230 に答える
2

アプリの現在のディレクトリに依存しないでください。アプリ バンドル (NSBundle正しいパスを取得するためのクラスを参照) またはアプリのドキュメント ディレクトリ (を参照NSSearchPathForDirectoriesInDomains(NSDocumentDirectory ...) から読み取る必要があります。

于 2013-09-19T09:41:27.753 に答える
1

現在の作業ディレクトリに関する UNIX の概念は、Mac デスクトップ アプリケーションでは一般的に使用されていません。Finder からアプリを起動すると、通常はブート ボリュームのルート ディレクトリに設定されます。

設定ファイルの場所を特定する別の方法を見つける必要があります。良いスポットは~/Library/Preferencesまたは~/Library/Application Support/MyAppです。これらのディレクトリへの絶対パスは、次を使用して取得できます。

NSString *path = NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomain, YES)[0];
于 2013-09-19T09:39:54.333 に答える