[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がないから。
ちょっとしたテクニックかも。