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 です。
なぜこのようなエラーが発生するのかを理解するために、誰でも私を助けることができますか?