-1

現在使用しているもの:

NSString* path = [[NSBundle mainBundle] pathForResource:@"filename" 
                                                 ofType:@"txt"];

ただし、これは、ファイルをアプリケーションバンドルに手動で追加した後にのみ機能します。

ドキュメントディレクトリを使用できますが、それはさらに悪いことです。

シムをリセットした後、ファイルは消えます。どうすればそれを維持できますか?

どこかからそこにファイルを書き出すにはどうすればよいですか?ソースのファイルからのように?数メガバイトのNSStringオブジェクトを割り当てたくありません。

4

3 に答える 3

2

クレジットはfreenodeirc(#iphonedev)のLyle42に送られます:

この分野が存在することすら知らなかった。コピーファイルのビルドフェーズ(ビルドフェーズの下)にファイルを追加することにより、それらはビルド間で保持されます。

次に、このコード:

NSString *_filePath = [[NSBundle mainBundle] pathForResource:@"filename" ofType:@"txt"];

NSLog(@"%@",_filePath);

NSData *_binary = [NSData dataWithContentsOfFile:_filePath];  

NSString *_fileContents = [[NSString alloc] initWithData:_binary encoding:NSUTF8StringEncoding];

うまく機能します。(ファイルの内容をNSStringにロードします)。

ファイルのコピービルドフェーズ

于 2013-01-12T07:48:14.917 に答える
1

これを使用して、ファイルのパスを取得できます

NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *path = [documentPaths objectAtIndex:0];
filePath = [path stringByAppendingPathComponent:file_name];

を使用してアプリバンドルからファイルを取得できます

NSString *pathFromApp = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:file_name];
于 2013-01-12T05:35:33.353 に答える
0

ドキュメントディレクトリを使用できますが、それはさらに悪いことです。

あまり。ドキュメントディレクトリは永続的であり、アプリケーションによって作成された重要なドキュメントの推奨ディレクトリです。また、iTunesでバックアップされており、iCloudバックアップ用に指定することができます。アプリバンドルはそれと競合することはできません!

シムをリセットした後、ファイルは消えます。どうすればそれを維持できますか?

シミュレーターが「リセット」されると(つまり、すべてのデータとアプリがハードワイプされると)、何も保存されません。ただし、テストビルドの合間に、アプリバンドルからコピーされたデータは、に保存しない限り存続するはずです/tmp。さらに、バンドル内のオブジェクトはビルドフェーズで「更新」(再コピー)されます。つまり、リソースは消去されず、プロジェクトで指定されたものにリセットされるだけです。

どこかからそこにファイルを書き出すにはどうすればよいですか?ソースのファイルからのように?数メガバイトのNSStringオブジェクトを割り当てたくありません。

ファイルをメモリに読み込むには、最終的に「数メガバイトのNSString」に変換する必要がありますが、大規模な文字列オブジェクトの計画に少しIOを追加したい場合は、を参照してくださいNSFileManager

于 2013-01-12T05:02:09.350 に答える