NSArrayとは
NSArrayはNSObjectを親オブジェクトとするオブジェクトの集合を格納するオブジェクトです。順番のあるデータの格納に向いています。 中に入れたオブジェクトはそれぞれ0から順番に番号が割り当てられて管理されます。番号の型はNSUIntegerです。 NSArrayの中にさらに別のNSArrayを入れたり、NSDictionaryを入れたりできます。 さらにそのNSArrayやNSDictionaryにNSArrayを格納して…ということで階層構造のデータを構築できます。
代表的なメソッド(目的別)
オブジェクトを列挙してNSArrayを作りたい - initWithObjects:
ファイルにNSArrayの内容を保存したい - writeToFile:atomically:
ファイルの内容からNSArrayオブジェクトを作りたい - initWithContentsOfFile:
中にあるオブジェクトの内容をログ出力したい - description
中にあるオブジェクトが何個あるか調べたい - count
中にあるオブジェクトの内容を取り出したい - objectAtIndex:
オブジェクトを列挙してNSArrayを作りたい - initWithObjects:
- (id)initWithObjects:(id)firstObj, ...
オブジェクトを順番に列挙してゆくことで、それらを格納したNSArrayを作ります。列挙したオブジェクトには順番に0, 1, 2, …とインデックスが割り当てられます。一番最後にnilを指定します。このメソッドはUISegmentControlの要素を作るのによく使われます。 以下の例は3つに分かれたUISegmentControlを作る時のコードの一部です。
NSArray *items = [[NSArray alloc] initWithObjects:@"少ない",@"中程度",@"多い",nil];
UISegmentControl *sControl = [[UISegmentedControl alloc]initWithItems:items];
[items release];
ファイルにNSArrayの内容を保存したい - writeToFile:atomically:
- (BOOL)writeToFile:(NSString *)path atomically:(BOOL)flag
現在のNSArrayをファイルにして保存します。以下の例では作ったNSArrayを標準で作られるアプリケーション用のドキュメントディレクトリに保存しています。 私はファイルの拡張子に定番のものがあるのかは知りませんが、ファイルの中身はxml形式なので、この例では拡張子をxmlにしています。 常識的に考えて、ドキュメントディレクトリが作られていないということは無いはずなので、特にエラー対策はしていません。attomicallyをYESにすると、 一度内容をファイルを別名で書き出し、その後で改名してその名前のファイルがある場合はそれを上書きします。 NOの場合は直接その名前で書き出します。
NSArray *items = [[NSArray alloc] initWithObjects:@"少ない",@"中程度",@"多い",nil];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *dataPath = [documentsDirectory stringByAppendingPathComponent:@"arraydata.xml"];
[items writeToFile:dataPath atomically:YES];
ファイルの内容からNSArrayオブジェクトを作りたい - initWithContentsOfFile:
- (id)initWithContentsOfFile:(NSString *)aPath
ファイルに保存したNSArrayの情報をもとにしてNSArrayを作ります。以下の例では標準で作られるアプリケーション用のドキュメントディレクトリにあるファイルから、 作成したNSArrayであるitemsに保存されていたNSArrayの情報をファイルから読み込んでいます。私はファイルの拡張子に定番のものがあるのかは知りませんが、 ファイルの中身はxml形式なので、この例では拡張子をxmlにしています。一応ファイルが存在しないときに実行しないようにエラー対策をしています。
NSArray *items;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *dataPath = [documentsDirectory stringByAppendingPathComponent:@"arraydata.xml"];
NSFileManager *fileManager = [NSFileManager defaultManager];
BOOL success = [fileManager fileExistsAtPath:dataPath];
if(success) {
items = [[NSArray alloc] initWithContentsOfFile:dataPath];
}
中にあるオブジェクトの内容をログ出力したい - description
- (NSString *)description
現在のNSArrayに格納されている情報を全て文字列にします。中にあるNSArrayやNSDictionaryも文字列にされます。デバッグ時のログ出力のためによく使われるメソッドです。
NSArray *items = [[NSArray alloc] initWithObjects:@"少ない",@"中程度",@"多い",nil];
NSLog(@"items:%@",[items description]);
中にあるオブジェクトが何個あるか調べたい - count
- (NSUInteger)count
中に何個の要素が入っているかをNSUIntegerで返します。下の例ではcountは3になっています。
NSArray *items = [[NSArray alloc] initWithObjects:@"少ない",@"中程度",@"多い",nil];
NSUInteger count = [items count]);
NSLog(@"count:%d",count);
中にあるオブジェクトの内容を取り出したい - objectAtIndex:
- (id)objectAtIndex:(NSUInteger)index
指定したインデックスの中に格納されているオブジェクトを返します。格納されている数を越えるインデックスを指定するとエラーになりますから、 このメソッドの実行前にcountを使ってインデックスの上限値を調べるなどエラー対策をしておくと安全です。下の例ではstrは"中程度"になっています。
NSArray *items = [[NSArray alloc] initWithObjects:@"少ない",@"中程度",@"多い",nil];
NSString *str = [items objectAtIndex:1];
NSLog(@"str:%@",str);