2

URLConnection を使用して、URL からファイルをダウンロードし、そのデータをドキュメント ディレクトリのファイルに保存しています。応答を受信すると、didReceiveResponse: メソッドが呼び出されたときに、ファイルを作成し、次のようにそのファイルの末尾に移動します。

NSString *filePath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0] stringByAppendingPathComponent:self.fileName];
NSLog(@"filepath is %@",filePath);
[[NSFileManager defaultManager] createFileAtPath:filePath contents:nil attributes:nil];
file = [[NSFileHandle fileHandleForUpdatingAtPath:filePath] retain];
[file seekToEndOfFile];

File は NSFileHandle クラスのオブジェクトです。後でデータを受信して​​いるときに、didReceiveData:(NSData *)data メソッドが呼び出されるたびに、受信したデータを次のようにファイルに保存します。

[file seekToEndOfFile];
[file writeData:data];

最後に、このように connectionDidFinishLoading: メソッドでファイルを閉じます。

[file closeFile];

システムでビルドして実行すると機能していました。しかし、別のシステムにコピーしてビルドしようとすると、次のエラーが発生します。

Terminating app due to uncaught exception `'NSFileHandleOperationException'`, reason: '*** `-[NSConcreteFileHandle seekToEndOfFile]: No such file or directory'`

http://www.techotopia.com/index.php/Working_with_Directories_on_iPhone_OSと NSSearchPathForDirectoriesInDomainsとは? を参照しました。NSSearchPathForDirectoriesInDomain 関数について知っていますが、まだ明確ではありません。

UserDomainMaskプロジェクトが存在するシステムとユーザーに応じて、適切なパスを返します。もしそうなら、なぜそのようなエラーが発生するのですか?

彼らは、返されるパス (ファイルパスに保存される) はパス /Users//Library/Application Support/iPhone Simulator/User/Application//Documents になると言います。

シミュレーターが実行されている Mac OS X システムに現在ログインしているユーザーの名前であり、アプリの一意の ID です。

なぜこのようなエラーが発生するのかを理解するために、誰でも私を助けることができますか?

4

2 に答える 2

0
-(NSString *) filePath
{

    NSArray *paths = NSSearchPathForDirectoriesInDomains(

                                                         NSDocumentDirectory, NSUserDomainMask, YES);

    NSString *documentsDir = [paths objectAtIndex:0];
    NSLog(@"documentsDir %@",documentsDir);

    return [documentsDir stringByAppendingPathComponent:@"xxxxx.sql"];
}
于 2015-09-08T08:58:57.013 に答える