[array writeTofile:@"パス名"];一発でいける。
ところが、arrayの要素がNSクラス(から継承されたクラス)でない場合、
これでは書き出せない。
正確には、NSCodingプロトコルに準拠しているクラスでないと書き出せない。
(書き出し時にエラーが発生する。)
たとえば、Cの構造体を要素にしている場合とかがこれに相当する。
NSValueが含まれる場合も、実体が任意のアドレス内容であるため同じ。
そういう場合は、要素毎NSDataに変換して出力する。
こんな感じ。
[[NSFileManager defaultManager]createFileAtPath:path contents:nil attributes:nil];
id fp=[NSFileHandle fileHandleForWritingAtPath:path];
typedef struct {
// 構造体定義
} ST;
ST st1;
NSValue *val;
NSEnumerator *emu=[lineArray objectEnumerator];
while (val=[emu nextObject]) {
// 1行ごと構造体に読みなおして書きだす
[val getValue:&st1];
NSData *data = [NSData dataWithBytes:&st1length:sizeof(ST)];
[fp writeData:data];
}
[fp closeFile];
NSValueの場合はNSString stringWithFormat:で文字列化して書き出すという手もある。ついでにいえば、NSArrayをNSDataに変換する方法、
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:array]; [fp writeData:data];を使ってもでもだめ。これもNSCodingがないから。
ちょっとしたテクニックかも。