第23回】この記事は2013年2月26日に書かれたものです。内容が古い可能性がありますのでご注意ください。第22回】>ではNSStringを使用したファイルの読み込みを行いました。ファイルから読み込んだデータを使用して処理を行うといったコードでした。読み込んだデータを使用して何かの処理を行った後、その結果を保存しておきたいとなった場合、DBに保存するなどの方法が考えられますが今回はファイルに書き込む方法を紹介したいと思います。ファイルに書き込みファイルの書き込みにも今回はNSStringクラスを使用します。NSStringクラスに「writeToFile」というメソッドが用意されていて、このメソッドはNSStringオブジェクトの内容をファイルに書き込みます。私の環境のGNUStepのNSString.hでは以下のように定義されていました。(NSError**)error;1つ目の引数はファイルへのパスを表す文字列オブジェクトを指定します。2つ目の引数はファイルに書き込む際に一時ファイルを作成して保存してから、リネームするやり方をするかどうかを指定します。することで不完全なファイルにならないようです。「YES」をするとそのやり方でファイルを作成します。NSString.mには以下のように書いてあります。result.3つ目の引数はファイルに書き込む際の文字コードを指定します。前回も登場したNSStringEncoding列挙型の定数を指定します。4つ目の引数はNSErrorオブジェクトを指定します。エラーの情報を管理するために使用されるクラスとなります。前回も出てきましたが「*」が2つついているのでポインタのポインタということになります。戻り値は問題なければ「YES(1)」とかえってくるようです。今回は「Manage.m」の方で最適BMI値に近い人をファイルに書き込むことにします。*person;}-(Person*)person;-(void)setPerson:(Person*)p;-(void)showBestPerson;-(void)recordBestPerson;@end11行目が追加されたところです。書き込み用のメソッド「recordBestPerson」を定義しているだけです。dealloc];}@end39から44行目のところは長くなってしまったため行を変えていますが、1つのメッセージ式に複数の引数を指定しているだけです。ここでは変数を埋め込んだ文字列を作成するために「initWithFormat」メソッドを使用しています。このメソッドは以下のように「NSString.h」で以下のように定義されていました。第18回】で使用した「stringByAppendingFormat」と同様です。引数「format」のところに書式を指定した文字列をいれ、その文字列に埋め込みたい変数を複数後ろに指定するというものになります。BMI値をそれぞれ埋め込んだ文字列を作成するために使用しています。name]の値がそこに入ります。height]]が順番に入ります。2.1は桁数を表しています。小数点より前に2ケタ後ろが1ケタということになります。45行目から48行目はファイルに書き込みする処理となっています。先ほど作成したNSStringオブジェクトに対して「writeToFile」メッセージを送信します。書き込むファイル名は「record.txt」としています。一時ファイルを作成して保存してから、リネームするやり方を使用するため第2引数では「YES」を指定しています。文字コードはLinuxなのでUTF8にしています。49行目では作成したNSStringオブジェクトを解放しています。「init」がついたメソッドを使用して作成したものは解放する必要があるため入れておかなければなりません。0;}増えているのは32行目です。呼び出しているだけですね。結果を見てみましょう。BMI値が書き込まれていますね。まとめ今回のまとめとしては・NSStringクラスのwriteToFileメソッドを使用することでファイルへ文字列の書き込みができる・ファイルの読み込みや書き込みの際には文字コードの指定ができ、列挙型の定数を使用して指定する・文字列を作成する方法にはinitWithFormatメソッドを使う方法もあるといったところでしょうか。