0

アプリに必要な基本データを含むテキスト ファイルがあります。ファイルを読み取ることができ、次の方法でファイル パスを取得します。

 NSString *filePath = [[NSBundle mainBundle] pathForResource:@"Money" ofType:@"txt"];

ファイルに書き込むには、次を使用すると思います。

[[HoldString dataUsingEncoding:NSUTF8StringEncoding] writeToFile:fileAtPath atomically:NO];

ただし、これは機能しません。次の方法でファイルパスを取得しようとしました:

NSString* filePath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString* fileAtPath = [filePath stringByAppendingPathComponent:@"Money.txt"];

これらのどれも機能しません。CoreData を使用せずにファイルから読み込めるようにしたいと考えています。

4

3 に答える 3

1

アプリのリソース バンドルは読み取り専用です (少なくとも実際のデバイスでは)。Documents ディレクトリなどの別の場所にデータを書き込む必要があります。

ほとんどのアプリは、ドキュメント ディレクトリにファイルが存在するかどうかを確認します。そうでない場合は、リソース バンドルからファイルをコピーします。次に、すべての読み取りと書き込みがコピーに対して行われます。

于 2013-03-20T00:11:14.353 に答える
1

アプリ バンドル内のパスに書き込むことはできません。あなたのバンドルは読み取り専用です。そのため、最初のアプローチは機能しません。

しかし、2 番目のアプローチは、実際にはドキュメント ディレクトリに有効なパスを形成するために機能するはずです。そこに何か読むものがありますか?アプリがインストールされると、そのディレクトリは空になります。自分で含めたテキスト ファイルを変更する場合は、まずバンドル パスからドキュメント フォルダーにコピーします。

于 2013-03-20T00:11:24.510 に答える
0

iOS では、アプリケーション バンドルは読み取り専用であるため、書き込みはできません。これを回避する方法は、ドキュメント フォルダーを使用して必要なファイルを保存し、そこにデータを書き込むことです。

あなたの場合、代替手段は NSUserDefaults を使用することです。そのため、アプリケーションを初めて実行するときに、バンドルのそのファイル (Money.text) から読み取ることができます (可能であれば、バンドルに保持しないでください)。読んだ後、書き込む代わりに、次のようにテキスト全体を NSUserDefaults に保存します。

[[NSUserDefaults standardUserDefaults] setObject: holdString forKey: @"money" ];  // By convention you should name it holdString instead of HoldString.  

データを読み取るには:

NSString* moneyStr= [[NSUserDefaults standardUserDefaults] objectForKey: @"money"];
于 2013-03-20T00:31:49.633 に答える